60806040526b204fce5e30444bad689c00006006553480156200002157600080fd5b506040518060400160405280600b81526020016a666f72626974737061636560a81b8152506040518060400160405280600381526020016246425360e81b81525081600390805190602001906200007a92919062000109565b5080516200009090600490602084019062000109565b505050620000ad620000a7620000b360201b60201c565b620000b7565b620001ec565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200011790620001af565b90600052602060002090601f0160209004810192826200013b576000855562000186565b82601f106200015657805160ff191683800117855562000186565b8280016001018555821562000186579182015b828111156200018657825182559160200191906001019062000169565b506200019492915062000198565b5090565b5b8082111562000194576000815560010162000199565b600281046001821680620001c457607f821691505b60208210811415620001e657634e487b7160e01b600052602260045260246000fd5b50919050565b611e7a80620001fc6000396000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c8063782d6fe1116100f9578063a9059cbb11610097578063dd62ed3e11610071578063dd62ed3e14610392578063e7a324dc146103a5578063f1127ed8146103ad578063f2fde38b146103ce576101c4565b8063a9059cbb14610359578063b4b5ea571461036c578063c3cda5201461037f576101c4565b806395d89b41116100d357806395d89b41146103185780639dc29fac14610320578063a457c2d714610333578063a6f9dae114610346576101c4565b8063782d6fe1146102ea5780637ecebe00146102fd5780638da5cb5b14610310576101c4565b806339509351116101665780635c19a95c116101405780635c19a95c1461029c5780636fcfff45146102af57806370a08231146102cf578063715018a6146102e2576101c4565b8063395093511461025457806340c10f1914610267578063587cde1e1461027c576101c4565b806320606b70116101a257806320606b701461021c57806323b872dd14610224578063313ce56714610237578063355274ea1461024c576101c4565b806306fdde03146101c9578063095ea7b3146101e757806318160ddd14610207575b600080fd5b6101d16103e1565b6040516101de91906117cc565b60405180910390f35b6101fa6101f536600461165e565b610473565b6040516101de9190611752565b61020f610491565b6040516101de919061175d565b61020f610497565b6101fa610232366004611623565b6104bb565b61023f610554565b6040516101de9190611ceb565b61020f610559565b6101fa61026236600461165e565b61055f565b61027a61027536600461165e565b6105b3565b005b61028f61028a3660046115d7565b610625565b6040516101de919061173e565b61027a6102aa3660046115d7565b610646565b6102c26102bd3660046115d7565b610653565b6040516101de9190611cc4565b61020f6102dd3660046115d7565b61066b565b61027a610686565b61020f6102f836600461165e565b6106d1565b61020f61030b3660046115d7565b6108f6565b61028f610908565b6101d1610917565b61027a61032e36600461165e565b610926565b6101fa61034136600461165e565b610997565b61027a6103543660046115d7565b610a10565b6101fa61036736600461165e565b610a58565b61020f61037a3660046115d7565b610a6c565b61027a61038d366004611687565b610ae1565b61020f6103a03660046115f1565b610cbc565b61020f610ce7565b6103c06103bb3660046116e5565b610d0b565b6040516101de929190611cd5565b61027a6103dc3660046115d7565b610d38565b6060600380546103f090611da4565b80601f016020809104026020016040519081016040528092919081815260200182805461041c90611da4565b80156104695780601f1061043e57610100808354040283529160200191610469565b820191906000526020600020905b81548152906001019060200180831161044c57829003601f168201915b5050505050905090565b6000610487610480610da6565b8484610daa565b5060015b92915050565b60025490565b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b60006104c8848484610e5e565b6001600160a01b0384166000908152600160205260408120816104e9610da6565b6001600160a01b03166001600160a01b03168152602001908152602001600020549050828110156105355760405162461bcd60e51b815260040161052c90611a40565b60405180910390fd5b61054985610541610da6565b858403610daa565b506001949350505050565b601290565b60065490565b600061048761056c610da6565b84846001600061057a610da6565b6001600160a01b03908116825260208083019390935260409182016000908120918b16815292529020546105ae9190611cf9565b610daa565b6105bb610da6565b6001600160a01b03166105cc610908565b6001600160a01b0316146105f25760405162461bcd60e51b815260040161052c90611a88565b6105fc8282610f88565b6001600160a01b03808316600090815260076020526040812054610621921683611050565b5050565b6001600160a01b03808216600090815260076020526040902054165b919050565b61065033826111b4565b50565b60096020526000908152604090205463ffffffff1681565b6001600160a01b031660009081526020819052604090205490565b61068e610da6565b6001600160a01b031661069f610908565b6001600160a01b0316146106c55760405162461bcd60e51b815260040161052c90611a88565b6106cf6000611243565b565b60004382106106f25760405162461bcd60e51b815260040161052c90611abd565b6001600160a01b03831660009081526009602052604090205463ffffffff168061072057600091505061048b565b6001600160a01b03841660009081526008602052604081208491610745600185611d7f565b63ffffffff908116825260208201929092526040016000205416116107ae576001600160a01b038416600090815260086020526040812090610788600184611d7f565b63ffffffff1663ffffffff1681526020019081526020016000206001015491505061048b565b6001600160a01b038416600090815260086020908152604080832083805290915290205463ffffffff168310156107e957600091505061048b565b6000806107f7600184611d7f565b90505b8163ffffffff168163ffffffff1611156108bf576000600261081c8484611d7f565b6108269190611d39565b6108309083611d7f565b6001600160a01b038816600090815260086020908152604080832063ffffffff80861685529083529281902081518083019092528054909316808252600190930154918101919091529192508714156108935760200151945061048b9350505050565b805163ffffffff168711156108aa578193506108b8565b6108b5600183611d7f565b92505b50506107fa565b506001600160a01b038516600090815260086020908152604080832063ffffffff9094168352929052206001015491505092915050565b600a6020526000908152604090205481565b6005546001600160a01b031690565b6060600480546103f090611da4565b61092e610da6565b6001600160a01b031661093f610908565b6001600160a01b0316146109655760405162461bcd60e51b815260040161052c90611a88565b6001600160a01b038216331461098d5760405162461bcd60e51b815260040161052c90611c05565b6106218282611295565b600080600160006109a6610da6565b6001600160a01b03908116825260208083019390935260409182016000908120918816815292529020549050828110156109f25760405162461bcd60e51b815260040161052c90611c3a565b610a066109fd610da6565b85858403610daa565b5060019392505050565b610a18610da6565b6001600160a01b0316610a29610908565b6001600160a01b031614610a4f5760405162461bcd60e51b815260040161052c90611a88565b61065081610d38565b6000610487610a65610da6565b8484610e5e565b6001600160a01b03811660009081526009602052604081205463ffffffff1680610a97576000610ada565b6001600160a01b038316600090815260086020526040812090610abb600184611d7f565b63ffffffff1663ffffffff168152602001908152602001600020600101545b9392505050565b60007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866610b0c6103e1565b80519060200120610b1b611386565b30604051602001610b2f949392919061178a565b60405160208183030381529060405280519060200120905060007fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf888888604051602001610b809493929190611766565b60405160208183030381529060405280519060200120905060008282604051602001610bad929190611723565b604051602081830303815290604052805190602001209050600060018288888860405160008152602001604052604051610bea94939291906117ae565b6020604051602081039080840390855afa158015610c0c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610c3f5760405162461bcd60e51b815260040161052c906119fa565b6001600160a01b0381166000908152600a60205260408120805491610c6383611ddf565b919050558914610c855760405162461bcd60e51b815260040161052c90611972565b87421115610ca55760405162461bcd60e51b815260040161052c9061181f565b610caf818b6111b4565b505050505b505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b60086020908152600092835260408084209091529082529020805460019091015463ffffffff9091169082565b610d40610da6565b6001600160a01b0316610d51610908565b6001600160a01b031614610d775760405162461bcd60e51b815260040161052c90611a88565b6001600160a01b038116610d9d5760405162461bcd60e51b815260040161052c906118ea565b61065081611243565b3390565b6001600160a01b038316610dd05760405162461bcd60e51b815260040161052c90611bc1565b6001600160a01b038216610df65760405162461bcd60e51b815260040161052c90611930565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610e5190859061175d565b60405180910390a3505050565b6001600160a01b038316610e845760405162461bcd60e51b815260040161052c90611b45565b6001600160a01b038216610eaa5760405162461bcd60e51b815260040161052c90611865565b610eb583838361138a565b6001600160a01b03831660009081526020819052604090205481811015610eee5760405162461bcd60e51b815260040161052c906119b4565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290610f25908490611cf9565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f6f919061175d565b60405180910390a3610f828484846111af565b50505050565b6001600160a01b038216610fae5760405162461bcd60e51b815260040161052c90611c7f565b610fba6000838361138a565b8060026000828254610fcc9190611cf9565b90915550506001600160a01b03821660009081526020819052604081208054839290610ff9908490611cf9565b90915550506040516001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061103c90859061175d565b60405180910390a3610621600083836111af565b816001600160a01b0316836001600160a01b0316141580156110725750600081115b156111af576001600160a01b03831615611115576001600160a01b03831660009081526009602052604081205463ffffffff1690816110b25760006110f5565b6001600160a01b0385166000908152600860205260408120906110d6600185611d7f565b63ffffffff1663ffffffff168152602001908152602001600020600101545b9050600061110382856113d7565b9050611111868484846113e3565b5050505b6001600160a01b038216156111af576001600160a01b03821660009081526009602052604081205463ffffffff169081611150576000611193565b6001600160a01b038416600090815260086020526040812090611174600185611d7f565b63ffffffff1663ffffffff168152602001908152602001600020600101545b905060006111a18285611584565b9050610cb4858484846113e3565b505050565b6001600160a01b03808316600090815260076020526040812054909116906111db8461066b565b6001600160a01b0385811660008181526007602052604080822080546001600160a01b031916898616908117909155905194955093928616927f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4610f82828483611050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166112bb5760405162461bcd60e51b815260040161052c90611b04565b6112c78260008361138a565b6001600160a01b038216600090815260208190526040902054818110156113005760405162461bcd60e51b815260040161052c906118a8565b6001600160a01b038316600090815260208190526040812083830390556002805484929061132f908490611d68565b90915550506040516000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061137290869061175d565b60405180910390a36111af836000846111af565b4690565b6113958383836111af565b6001600160a01b0383166111af57600654816113af610491565b6113b99190611cf9565b11156111af5760405162461bcd60e51b815260040161052c90611b8a565b6000610ada8284611d68565b600061140743604051806060016040528060348152602001611e1160349139611590565b905060008463ffffffff1611801561146157506001600160a01b038516600090815260086020526040812063ffffffff831691611445600188611d7f565b63ffffffff908116825260208201929092526040016000205416145b156114aa576001600160a01b0385166000908152600860205260408120839161148b600188611d7f565b63ffffffff16815260208101919091526040016000206001015561153a565b60408051808201825263ffffffff838116825260208083018681526001600160a01b038a166000908152600883528581208a851682529092529390209151825463ffffffff191691161781559051600191820155611509908590611d11565b6001600160a01b0386166000908152600960205260409020805463ffffffff191663ffffffff929092169190911790555b846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248484604051611575929190611cb6565b60405180910390a25050505050565b6000610ada8284611cf9565b60008164010000000084106115b85760405162461bcd60e51b815260040161052c91906117cc565b509192915050565b80356001600160a01b038116811461064157600080fd5b6000602082840312156115e8578081fd5b610ada826115c0565b60008060408385031215611603578081fd5b61160c836115c0565b915061161a602084016115c0565b90509250929050565b600080600060608486031215611637578081fd5b611640846115c0565b925061164e602085016115c0565b9150604084013590509250925092565b60008060408385031215611670578182fd5b611679836115c0565b946020939093013593505050565b60008060008060008060c0878903121561169f578182fd5b6116a8876115c0565b95506020870135945060408701359350606087013560ff811681146116cb578283fd5b9598949750929560808101359460a0909101359350915050565b600080604083850312156116f7578182fd5b611700836115c0565b9150602083013563ffffffff81168114611718578182fd5b809150509250929050565b61190160f01b81526002810192909252602282015260420190565b6001600160a01b0391909116815260200190565b901515815260200190565b90815260200190565b9384526001600160a01b039290921660208401526040830152606082015260800190565b938452602084019290925260408301526001600160a01b0316606082015260800190565b93845260ff9290921660208401526040830152606082015260800190565b6000602080835283518082850152825b818110156117f8578581018301518582016040015282016117dc565b818111156118095783604083870101525b50601f01601f1916929092016040019392505050565b60208082526026908201527f4642533a3a3a64656c656761746542795369673a207369676e617475726520656040820152651e1c1a5c995960d21b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526022908201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604082015261636560f01b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b60208082526022908201527f4642533a3a3a64656c656761746542795369673a20696e76616c6964206e6f6e604082015261636560f01b606082015260800190565b60208082526026908201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604082015265616c616e636560d01b606082015260800190565b60208082526026908201527f4642533a3a3a64656c656761746542795369673a20696e76616c6964207369676040820152656e617475726560d01b606082015260800190565b60208082526028908201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616040820152676c6c6f77616e636560c01b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526027908201527f4642533a3a3a6765745072696f72566f7465733a206e6f742079657420646574604082015266195c9b5a5b995960ca1b606082015260800190565b60208082526021908201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736040820152607360f81b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526019908201527f45524332304361707065643a2063617020657863656564656400000000000000604082015260600190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252818101527f52657175697265206d73672073656e64657220746f206275726e20746f6b656e604082015260600190565b60208082526025908201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604082015264207a65726f60d81b606082015260800190565b6020808252601f908201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604082015260600190565b918252602082015260400190565b63ffffffff91909116815260200190565b63ffffffff929092168252602082015260400190565b60ff91909116815260200190565b60008219821115611d0c57611d0c611dfa565b500190565b600063ffffffff808316818516808303821115611d3057611d30611dfa565b01949350505050565b600063ffffffff80841680611d5c57634e487b7160e01b83526012600452602483fd5b92169190910492915050565b600082821015611d7a57611d7a611dfa565b500390565b600063ffffffff83811690831681811015611d9c57611d9c611dfa565b039392505050565b600281046001821680611db857607f821691505b60208210811415611dd957634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415611df357611df3611dfa565b5060010190565b634e487b7160e01b600052601160045260246000fdfe4642533a3a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d62657220657863656564732033322062697473a2646970667358221220aa755873140a3fc3af28839ebbf6c26ec8cd1b52b432c9ddddb7f12cda0fb92c64736f6c63430008000033