608060405234801561001057600080fd5b50615142806100206000396000f3fe608060405234801561001057600080fd5b50600436106101ce5760003560e01c80638924af7411610104578063c79178c6116100a2578063f242432a11610071578063f242432a146103d3578063f2fde38b146103e6578063f5298aca146103f9578063ffc4e0a71461040c576101ce565b8063c79178c614610392578063e07f2319146103a5578063e8a3d485146103b8578063e985e9c5146103c0576101ce565b806395d89b41116100de57806395d89b411461035157806398d0b4fb14610359578063a22cb4651461036c578063bb3bafd61461037f576101ce565b80638924af74146103085780638da5cb5b146103295780639066d66b1461033e576101ce565b80632eb2c2d6116101715780636b20c4541161014b5780636b20c454146102c55780636c0360eb146102d8578063715018a6146102e0578063891be974146102e8576101ce565b80632eb2c2d61461027f5780634e1273f4146102925780634eb840e1146102b2576101ce565b80630e89341c116101ad5780630e89341c146102315780630eaead671461024457806318054c37146102595780631e014a4b1461026c576101ce565b8062fdd58e146101d357806301ffc9a7146101fc57806306fdde031461021c575b600080fd5b6101e66101e1366004614515565b61041f565b6040516101f39190614d35565b60405180910390f35b61020f61020a3660046145d5565b61048e565b6040516101f39190614a24565b6102246104b1565b6040516101f39190614a2f565b61022461023f36600461483d565b610540565b610257610252366004614722565b610551565b005b6102576102673660046144e4565b61075b565b61025761027a3660046147d2565b6107dd565b61025761028d366004614360565b6109d7565b6102a56102a0366004614574565b610ccd565b6040516101f391906149e0565b6102576102c036600461477a565b610db9565b6102576102d3366004614471565b610ed8565b610224610f51565b610257610fe9565b6102fb6102f636600461483d565b6110a7565b6040516101f391906149cd565b61031b610316366004614896565b61113c565b6040516101f39291906149a6565b61033161118b565b6040516101f3919061495e565b61025761034c3660046145fd565b61119a565b6102246112f9565b61031b610367366004614896565b611355565b61025761037a3660046144e4565b611372565b6102fb61038d36600461483d565b611461565b6102246103a036600461483d565b6114e1565b6102576103b3366004614855565b6114ec565b61022461152f565b61020f6103ce366004614328565b61158b565b6102576103e136600461440a565b61159e565b6102576103f436600461430c565b611769565b610257610407366004614540565b61187e565b61025761041a3660046146ba565b6118f2565b60006001600160a01b0383166104665760405162461bcd60e51b815260040180806020018281038252602b815260200180614ebe602b913960400191505060405180910390fd5b5060009081526097602090815260408083206001600160a01b03949094168352929052205490565b6001600160e01b0319811660009081526065602052604090205460ff165b919050565b610262805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156105385780601f1061050d57610100808354040283529160200191610538565b820191906000526020600020905b81548152906001019060200180831161051b57829003601f168201915b505050505081565b606061054b8261194d565b92915050565b825160601c6000610560611b8a565b9050806001600160a01b0316826001600160a01b031614806105875750610587828261158b565b6105ac5760405162461bcd60e51b81526004016105a390614bb0565b60405180910390fd5b600083116105cc5760405162461bcd60e51b81526004016105a390614b79565b845160009081526101fc60205260409020546107355784606001516000815181106105f357fe5b6020026020010151600001516001600160a01b0316826001600160a01b03161461062f5760405162461bcd60e51b81526004016105a390614aae565b60008560400151116106535760405162461bcd60e51b81526004016105a390614a42565b8460a00151518560600151511461066957600080fd5b600061067486611b8e565b905060005b8660600151518110156106ea5760008760600151828151811061069857fe5b6020026020010151600001519050836001600160a01b0316816001600160a01b0316146106e1576106e181848a60a0015185815181106106d457fe5b6020026020010151611de3565b50600101610679565b506106fd86600001518760400151611dee565b61070f86600001518760800151611e58565b61072186600001518760600151611fe8565b610733866000015187602001516121a5565b505b6107548486600001518560405180602001604052806000815250612269565b5050505050565b610763611b8a565b6001600160a01b031661077461118b565b6001600160a01b0316146107cf576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6107d98282612275565b5050565b835160601c60006107ec611b8a565b9050806001600160a01b0316826001600160a01b031614806108135750610813828261158b565b61082f5760405162461bcd60e51b81526004016105a390614bb0565b6000831161084f5760405162461bcd60e51b81526004016105a390614b79565b855161085a906122d5565b6109b057856060015160008151811061086f57fe5b6020026020010151600001516001600160a01b0316826001600160a01b0316146108ab5760405162461bcd60e51b81526004016105a390614aae565b60008660400151116108cf5760405162461bcd60e51b81526004016105a390614a42565b8560a0015151866060015151146108e557600080fd5b60006108f087611b8e565b905060005b8760600151518110156109595760008860600151828151811061091457fe5b6020026020010151600001519050836001600160a01b0316816001600160a01b0316146109505761095081848b60a0015185815181106106d457fe5b506001016108f5565b5061096c87600001518860400151611dee565b61097e87600001518860800151611e58565b61099087600001518860600151611fe8565b6109a2876000015188602001516121a5565b86516109ae90876122e8565b505b6109cf8487600001518560405180602001604052806000815250612269565b505050505050565b8151835114610a175760405162461bcd60e51b81526004018080602001828103825260288152602001806150c46028913960400191505060405180910390fd5b6001600160a01b038416610a5c5760405162461bcd60e51b8152600401808060200182810382526025815260200180614f7e6025913960400191505060405180910390fd5b610a64611b8a565b6001600160a01b0316856001600160a01b03161480610a8a5750610a8a856103ce611b8a565b610ac55760405162461bcd60e51b8152600401808060200182810382526032815260200180614fa36032913960400191505060405180910390fd5b6000610acf611b8a565b9050610adf8187878787876109cf565b60005b8451811015610be5576000858281518110610af957fe5b602002602001015190506000858381518110610b1157fe5b60200260200101519050610b7e816040518060600160405280602a8152602001615048602a91396097600086815260200190815260200160002060008d6001600160a01b03166001600160a01b03168152602001908152602001600020546123349092919063ffffffff16565b60008381526097602090815260408083206001600160a01b038e811685529252808320939093558a1681522054610bb590826123cb565b60009283526097602090815260408085206001600160a01b038c1686529091529092209190915550600101610ae2565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015610c6b578181015183820152602001610c53565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015610caa578181015183820152602001610c92565b5050505090500194505050505060405180910390a46109cf818787878787612425565b60608151835114610d0f5760405162461bcd60e51b815260040180806020018281038252602981526020018061509b6029913960400191505060405180910390fd5b6000835167ffffffffffffffff81118015610d2957600080fd5b50604051908082528060200260200182016040528015610d53578160200160208202803683370190505b50905060005b8451811015610db157610d92858281518110610d7157fe5b6020026020010151858381518110610d8557fe5b602002602001015161041f565b828281518110610d9e57fe5b6020908102919091010152600101610d59565b509392505050565b610dc1611b8a565b6001600160a01b0316610dd261118b565b6001600160a01b031614610e2d576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b8051825114610e4e5760405162461bcd60e51b81526004016105a390614c7b565b60005b8251811015610ed2576000838281518110610e6857fe5b6020026020010151905060006001600160a01b0316816001600160a01b03161415610ea55760405162461bcd60e51b81526004016105a390614b1c565b6000838381518110610eb357fe5b60200260200101519050610ec8868383610551565b5050600101610e51565b50505050565b610ee0611b8a565b6001600160a01b0316836001600160a01b03161480610f065750610f06836103ce611b8a565b610f415760405162461bcd60e51b8152600401808060200182810382526029815260200180614f336029913960400191505060405180910390fd5b610f4c8383836126bd565b505050565b61012f8054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610fde5780601f10610fb357610100808354040283529160200191610fde565b820191906000526020600020905b815481529060010190602001808311610fc157829003601f168201915b505050505090505b90565b610ff1611b8a565b6001600160a01b031661100261118b565b6001600160a01b03161461105d576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b60606101fb6000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b8282101561113157600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046bffffffffffffffffffffffff16818301528252600190920191016110dd565b505050509050919050565b6101fa602052816000526040600020818154811061115957600080fd5b6000918252602090912001546001600160a01b0381169250600160a01b90046bffffffffffffffffffffffff16905082565b6033546001600160a01b031690565b600054610100900460ff16806111b357506111b361292b565b806111c1575060005460ff16155b6111fc5760405162461bcd60e51b815260040180806020018281038252602e815260200180614fd5602e913960400191505060405180910390fd5b600054610100900460ff16158015611227576000805460ff1961ff0019909116610100171660011790555b61122f61293c565b611237612a36565b61123f612b00565b611247612bb6565b61124f612c56565b61126760405180602001604052806000815250612d57565b61127083612e54565b611278612bb6565b611280612f1f565b61128a8686612fd5565b611293846130a2565b61129e826001612275565b7f630c3520bebe920390fcfcb48ef2e0bde326ef10f85761c5f708d1ccebf6ba736112c7611b8a565b87876040516112d893929190614972565b60405180910390a180156109cf576000805461ff0019169055505050505050565b610263805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156105385780601f1061050d57610100808354040283529160200191610538565b6101fb602052816000526040600020818154811061115957600080fd5b816001600160a01b0316611384611b8a565b6001600160a01b031614156113ca5760405162461bcd60e51b81526004018080602001828103825260298152602001806150726029913960400191505060405180910390fd5b80609860006113d7611b8a565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff19169215159290921790915561141b611b8a565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b60008181526101fa6020908152604080832080548251818502810185019093528083526060949293919290918401821561113157600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046bffffffffffffffffffffffff16818301528252600190920191016110dd565b606061054b826130b6565b816001600160a01b03166114fe611b8a565b6001600160a01b0316146115245760405162461bcd60e51b81526004016105a390614ae5565b610f4c838383613158565b610230805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156105385780601f1061050d57610100808354040283529160200191610538565b60006115978383613204565b9392505050565b6001600160a01b0384166115e35760405162461bcd60e51b8152600401808060200182810382526025815260200180614f7e6025913960400191505060405180910390fd5b6115eb611b8a565b6001600160a01b0316856001600160a01b031614806116115750611611856103ce611b8a565b61164c5760405162461bcd60e51b8152600401808060200182810382526029815260200180614f336029913960400191505060405180910390fd5b6000611656611b8a565b905061167681878761166788613230565b61167088613230565b876109cf565b6116bd836040518060600160405280602a8152602001615048602a913960008781526097602090815260408083206001600160a01b038d1684529091529020549190612334565b60008581526097602090815260408083206001600160a01b038b811685529252808320939093558716815220546116f490846123cb565b60008581526097602090815260408083206001600160a01b03808b168086529184529382902094909455805188815291820187905280518a8416938616927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6292908290030190a46109cf818787878787613275565b611771611b8a565b6001600160a01b031661178261118b565b6001600160a01b0316146117dd576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166118225760405162461bcd60e51b8152600401808060200182810382526026815260200180614ee96026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b611886611b8a565b6001600160a01b0316836001600160a01b031614806118ac57506118ac836103ce611b8a565b6118e75760405162461bcd60e51b8152600401808060200182810382526029815260200180614f336029913960400191505060405180910390fd5b610f4c8383836133ff565b600061190284866000015161041f565b905081811561193c5782808310156119175750815b61193786868960000151846040518060200160405280600081525061159e565b830390505b80156109cf576109cf868583610551565b600081815261012e6020908152604080832080548251601f60026000196101006001861615020190931692909204918201859004850281018501909352808352606094938301828280156119e25780601f106119b7576101008083540402835291602001916119e2565b820191906000526020600020905b8154815290600101906020018083116119c557829003601f168201915b5050505050905060006119f3610f51565b9050805160001415611a07575090506104ac565b815115611ac85780826040516020018083805190602001908083835b60208310611a425780518252601f199092019160209182019101611a23565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b60208310611a8a5780518252601f199092019160209182019101611a6b565b6001836020036101000a03801982511681845116808217855250505050505090500192505050604051602081830303815290604052925050506104ac565b80611ad285613532565b6040516020018083805190602001908083835b60208310611b045780518252601f199092019160209182019101611ae5565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b60208310611b4c5780518252601f199092019160209182019101611b2d565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405292505050919050565b3390565b60008082608001515167ffffffffffffffff81118015611bad57600080fd5b50604051908082528060200260200182016040528015611bd7578160200160208202803683370190505b50905060005b836080015151811015611c2957611c0a84608001518281518110611bfd57fe5b6020026020010151613641565b828281518110611c1657fe5b6020908102919091010152600101611bdd565b50600083606001515167ffffffffffffffff81118015611c4857600080fd5b50604051908082528060200260200182016040528015611c72578160200160208202803683370190505b50905060005b846060015151811015611cb757611c9885606001518281518110611bfd57fe5b828281518110611ca457fe5b6020908102919091010152600101611c78565b507ffb988707ebb338694f318760b0fd5cfe756d00a2ade251fda110b80c336a3c7f846000015185604001518660200151805190602001208460405160200180828051906020019060200280838360005b83811015611d20578181015183820152602001611d08565b50505050905001915050604051602081830303815290604052805190602001208660405160200180828051906020019060200280838360005b83811015611d71578181015183820152602001611d59565b50505050905001915050604051602081830303815290604052805190602001206040516020018087815260200186815260200185815260200184815260200183815260200182815260200196505050505050506040516020818303038152906040528051906020012092505050919050565b610f4c8383836136b3565b60008281526101fc602052604090205415611e0857600080fd5b60008281526101fc6020526040908190208290555182907f5e2aa66efd74cce82b21852e317e5490d9ecc9e6bb953ae24d90851258cc2f5c90611e4c908490614d35565b60405180910390a25050565b60005b8151811015611fdd5760006001600160a01b0316828281518110611e7b57fe5b6020026020010151600001516001600160a01b03161415611ee3576040805162461bcd60e51b815260206004820152601b60248201527f526563697069656e742073686f756c642062652070726573656e740000000000604482015290519081900360640190fd5b818181518110611eef57fe5b6020026020010151602001516bffffffffffffffffffffffff1660001415611f5e576040805162461bcd60e51b815260206004820181905260248201527f526f79616c74792076616c75652073686f756c6420626520706f736974697665604482015290519081900360640190fd5b60008381526101fa602052604090208251839083908110611f7b57fe5b60209081029190910181015182546001818101855560009485529383902082519101805492909301516bffffffffffffffffffffffff16600160a01b026001600160a01b039182166001600160a01b0319909316929092171617905501611e5b565b506107d98282613904565b60008281526101fb6020526040812090805b83518110156121455760006001600160a01b031684828151811061201a57fe5b6020026020010151600001516001600160a01b0316141561204d5760405162461bcd60e51b81526004016105a390614c44565b83818151811061205957fe5b6020026020010151602001516bffffffffffffffffffffffff16600014156120935760405162461bcd60e51b81526004016105a390614a79565b828482815181106120a057fe5b602090810291909101810151825460018101845560009384529282902081519301805491909201516bffffffffffffffffffffffff16600160a01b026001600160a01b039384166001600160a01b031990921691909117909216919091179055835161213b9085908390811061211257fe5b6020026020010151602001516bffffffffffffffffffffffff16836123cb90919063ffffffff16565b9150600101611ffa565b5080612710146121675760405162461bcd60e51b81526004016105a390614cd8565b837f841ffb90d4cabdd1f16034f3fa831d79060febbb8167bdd54a49269365bdf78f8460405161219791906149cd565b60405180910390a250505050565b600082815261012e6020908152604090912082516121c592840190613f53565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b6121f18461194d565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561222b578181015183820152602001612213565b50505050905090810190601f1680156122585780820380516001836020036101000a031916815260200191505b509250505060405180910390a25050565b610ed284848484613941565b6001600160a01b038216600081815260c96020908152604091829020805460ff1916851515908117909155825190815291517f270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b9281900390910190a25050565b60009081526101fc602052604090205490565b600082815261029660209081526040909120825161230892840190613f53565b50817fa595484f343d9669f13f28cff734012d5ea0924a2ec5440aa2c2833751c9a2886121f1846130b6565b600081848411156123c35760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612388578181015183820152602001612370565b50505050905090810190601f1680156123b55780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082820183811015611597576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b612437846001600160a01b03166139ac565b156109cf57836001600160a01b031663bc197c8187878686866040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b03168152602001806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b838110156124c55781810151838201526020016124ad565b50505050905001848103835286818151815260200191508051906020019060200280838360005b838110156125045781810151838201526020016124ec565b50505050905001848103825285818151815260200191508051906020019080838360005b83811015612540578181015183820152602001612528565b50505050905090810190601f16801561256d5780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b15801561259257600080fd5b505af19250505080156125b757506040513d60208110156125b257600080fd5b505160015b61264c576125c3614da7565b806125ce5750612615565b60405162461bcd60e51b8152602060048201818152835160248401528351849391928392604401919085019080838360008315612388578181015183820152602001612370565b60405162461bcd60e51b8152600401808060200182810382526034815260200180614e626034913960400191505060405180910390fd5b6001600160e01b031981167fbc197c8100000000000000000000000000000000000000000000000000000000146126b45760405162461bcd60e51b8152600401808060200182810382526028815260200180614e966028913960400191505060405180910390fd5b50505050505050565b6001600160a01b0383166127025760405162461bcd60e51b81526004018080602001828103825260238152602001806150256023913960400191505060405180910390fd5b80518251146127425760405162461bcd60e51b81526004018080602001828103825260288152602001806150c46028913960400191505060405180910390fd5b600061274c611b8a565b905061276c818560008686604051806020016040528060008152506109cf565b60005b835181101561284a5761280183828151811061278757fe5b6020026020010151604051806060016040528060248152602001614f0f60249139609760008886815181106127b857fe5b602002602001015181526020019081526020016000206000896001600160a01b03166001600160a01b03168152602001908152602001600020546123349092919063ffffffff16565b6097600086848151811061281157fe5b602090810291909101810151825281810192909252604090810160009081206001600160a01b038a16825290925290205560010161276f565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156128d15781810151838201526020016128b9565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156129105781810151838201526020016128f8565b5050505090500194505050505060405180910390a450505050565b6000612936306139ac565b15905090565b600054610100900460ff1680612955575061295561292b565b80612963575060005460ff16155b61299e5760405162461bcd60e51b815260040180806020018281038252602e815260200180614fd5602e913960400191505060405180910390fd5b600054610100900460ff161580156129c9576000805460ff1961ff0019909116610100171660011790555b60006129d3611b8a565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015612a33576000805461ff00191690555b50565b600054610100900460ff1680612a4f5750612a4f61292b565b80612a5d575060005460ff16155b612a985760405162461bcd60e51b815260040180806020018281038252602e815260200180614fd5602e913960400191505060405180910390fd5b600054610100900460ff16158015612ac3576000805460ff1961ff0019909116610100171660011790555b612aec7f6db15a0f000000000000000000000000000000000000000000000000000000006139b2565b8015612a33576000805461ff001916905550565b600054610100900460ff1680612b195750612b1961292b565b80612b27575060005460ff16155b612b625760405162461bcd60e51b815260040180806020018281038252602e815260200180614fd5602e913960400191505060405180910390fd5b600054610100900460ff16158015612b8d576000805460ff1961ff0019909116610100171660011790555b612aec7f01ffc9a7000000000000000000000000000000000000000000000000000000006139b2565b600054610100900460ff1680612bcf5750612bcf61292b565b80612bdd575060005460ff16155b612c185760405162461bcd60e51b815260040180806020018281038252602e815260200180614fd5602e913960400191505060405180910390fd5b600054610100900460ff16158015612aec576000805460ff1961ff0019909116610100171660011790558015612a33576000805461ff001916905550565b600054610100900460ff1680612c6f5750612c6f61292b565b80612c7d575060005460ff16155b612cb85760405162461bcd60e51b815260040180806020018281038252602e815260200180614fd5602e913960400191505060405180910390fd5b600054610100900460ff16158015612ce3576000805460ff1961ff0019909116610100171660011790555b612aec6040518060400160405280600881526020017f4d696e74313135350000000000000000000000000000000000000000000000008152506040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250613a36565b600054610100900460ff1680612d705750612d7061292b565b80612d7e575060005460ff16155b612db95760405162461bcd60e51b815260040180806020018281038252602e815260200180614fd5602e913960400191505060405180910390fd5b600054610100900460ff16158015612de4576000805460ff1961ff0019909116610100171660011790555b612ded82613af8565b612e167fd9b67a26000000000000000000000000000000000000000000000000000000006139b2565b612e3f7f0e89341c000000000000000000000000000000000000000000000000000000006139b2565b80156107d9576000805461ff00191690555050565b600054610100900460ff1680612e6d5750612e6d61292b565b80612e7b575060005460ff16155b612eb65760405162461bcd60e51b815260040180806020018281038252602e815260200180614fd5602e913960400191505060405180910390fd5b600054610100900460ff16158015612ee1576000805460ff1961ff0019909116610100171660011790555b8151612ef590610230906020850190613f53565b50612e3f7fe8a3d485000000000000000000000000000000000000000000000000000000006139b2565b600054610100900460ff1680612f385750612f3861292b565b80612f46575060005460ff16155b612f815760405162461bcd60e51b815260040180806020018281038252602e815260200180614fd5602e913960400191505060405180910390fd5b600054610100900460ff16158015612fac576000805460ff1961ff0019909116610100171660011790555b612aec7f44c74bcc000000000000000000000000000000000000000000000000000000006139b2565b600054610100900460ff1680612fee5750612fee61292b565b80612ffc575060005460ff16155b6130375760405162461bcd60e51b815260040180806020018281038252602e815260200180614fd5602e913960400191505060405180910390fd5b600054610100900460ff16158015613062576000805460ff1961ff0019909116610100171660011790555b825161307690610262906020860190613f53565b50815161308b90610263906020850190613f53565b508015610f4c576000805461ff0019169055505050565b80516107d99061012f906020840190613f53565b60008181526102966020908152604080832080548251601f600260001961010060018616150201909316929092049182018590048502810185019093528083526060949383018282801561314b5780601f106131205761010080835404028352916020019161314b565b820191906000526020600020905b81548152906001019060200180831161312e57829003601f168201915b5093979650505050505050565b60008381526101fa6020526040812054905b818110156107545760008581526101fa6020526040902080546001600160a01b03861691908390811061319957fe5b6000918252602090912001546001600160a01b031614156131fc5760008581526101fa602052604090208054849190839081106131d257fe5b600091825260209091200180546001600160a01b0319166001600160a01b03929092169190911790555b60010161316a565b6001600160a01b038116600090815260c9602052604081205460ff168061159757506115978383613b0b565b6040805160018082528183019092526060916000919060208083019080368337019050509050828160008151811061326457fe5b602090810291909101015292915050565b613287846001600160a01b03166139ac565b156109cf57836001600160a01b031663f23a6e6187878686866040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b0316815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156133165781810151838201526020016132fe565b50505050905090810190601f1680156133435780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600087803b15801561336657600080fd5b505af192505050801561338b57506040513d602081101561338657600080fd5b505160015b613397576125c3614da7565b6001600160e01b031981167ff23a6e6100000000000000000000000000000000000000000000000000000000146126b45760405162461bcd60e51b8152600401808060200182810382526028815260200180614e966028913960400191505060405180910390fd5b6001600160a01b0383166134445760405162461bcd60e51b81526004018080602001828103825260238152602001806150256023913960400191505060405180910390fd5b600061344e611b8a565b905061347e8185600061346087613230565b61346987613230565b604051806020016040528060008152506109cf565b6134c582604051806060016040528060248152602001614f0f6024913960008681526097602090815260408083206001600160a01b038b1684529091529020549190612334565b60008481526097602090815260408083206001600160a01b03808a16808652918452828520959095558151888152928301879052815193949093908616927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6292908290030190a450505050565b606081613573575060408051808201909152600181527f300000000000000000000000000000000000000000000000000000000000000060208201526104ac565b8160005b811561358b57600101600a82049150613577565b60008167ffffffffffffffff811180156135a457600080fd5b506040519080825280601f01601f1916602001820160405280156135cf576020820181803683370190505b50859350905060001982015b831561363857600a840660300160f81b828280600190039350815181106135fe57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a840493506135db565b50949350505050565b8051602091820151604080517f397e04204c1e1a60ee8724b71f8244e10ab5f2e9009854d80f602bda21b59ebb818601526001600160a01b03909316838201526bffffffffffffffffffffffff9091166060808401919091528151808403909101815260809092019052805191012090565b60006136be83613b39565b90506136d2846001600160a01b03166139ac565b1561386457604080517f1626ba7e00000000000000000000000000000000000000000000000000000000808252600482018481526024830193845285516044840152855191936001600160a01b03891693631626ba7e938793899390929091606490910190602085019080838360005b8381101561375a578181015183820152602001613742565b50505050905090810190601f1680156137875780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b1580156137a557600080fd5b505afa1580156137b9573d6000803e3d6000fd5b505050506040513d60208110156137cf57600080fd5b505160408051808201909152601c81527f7369676e617475726520766572696669636174696f6e206572726f72000000006020820152916001600160e01b03199091161461385e5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315612388578181015183820152602001612370565b50610ed2565b6001600160a01b0384166138788284613ba0565b6001600160a01b0316146040518060400160405280601c81526020017f7369676e617475726520766572696669636174696f6e206572726f7200000000815250906107545760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315612388578181015183820152602001612370565b7f3fa96d7b6bcbfe71ef171666d84db3cf52fa2d1c8afdb1cc8e486177f208b7df8282604051613935929190614d3e565b60405180910390a15050565b60008381526101fd602052604081205461395c9084906123cb565b60008581526101fc602052604090205490915081111561398e5760405162461bcd60e51b81526004016105a390614c0d565b60008481526101fd6020526040902081905561075485858585613c20565b3b151590565b6001600160e01b03198082161415613a11576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152606560205260409020805460ff19166001179055565b600054610100900460ff1680613a4f5750613a4f61292b565b80613a5d575060005460ff16155b613a985760405162461bcd60e51b815260040180806020018281038252602e815260200180614fd5602e913960400191505060405180910390fd5b600054610100900460ff16158015613ac3576000805460ff1961ff0019909116610100171660011790555b825160208085019190912083519184019190912061016291909155610163558015610f4c576000805461ff0019169055505050565b80516107d9906099906020840190613f53565b6001600160a01b03918216600090815260986020908152604080832093909416825291909152205460ff1690565b6000613b43613d21565b8260405160200180807f190100000000000000000000000000000000000000000000000000000000000081525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b60008151604114613bf8576040805162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a613c1686828585613d61565b9695505050505050565b6001600160a01b038416613c655760405162461bcd60e51b81526004018080602001828103825260218152602001806150ec6021913960400191505060405180910390fd5b6000613c6f611b8a565b9050613c818160008761166788613230565b60008481526097602090815260408083206001600160a01b0389168452909152902054613cae90846123cb565b60008581526097602090815260408083206001600160a01b03808b16808652918452828520959095558151898152928301889052815190948616927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6292908290030190a461075481600087878787613275565b6000613d5c7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f613d4f613edf565b613d57613ee6565b613eed565b905090565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115613dc25760405162461bcd60e51b8152600401808060200182810382526022815260200180614f5c6022913960400191505060405180910390fd5b8360ff16601b1480613dd757508360ff16601c145b613e125760405162461bcd60e51b81526004018080602001828103825260228152602001806150036022913960400191505060405180910390fd5b600060018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015613e6e573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116613ed6576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b6101625490565b6101635490565b6000838383613efa613f4f565b3060405160200180868152602001858152602001848152602001838152602001826001600160a01b03168152602001955050505050506040516020818303038152906040528051906020012090509392505050565b4690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282613f895760008555613fcf565b82601f10613fa257805160ff1916838001178555613fcf565b82800160010185558215613fcf579182015b82811115613fcf578251825591602001919060010190613fb4565b50613fdb929150613fdf565b5090565b5b80821115613fdb5760008155600101613fe0565b600082601f830112614004578081fd5b8135602061401961401483614d83565b614d5f565b8281528181019085830183850287018401881015614035578586fd5b855b8581101561405c57813561404a81614e4c565b84529284019290840190600101614037565b5090979650505050505050565b600082601f830112614079578081fd5b8135602061408961401483614d83565b82815281810190858301855b8581101561405c576140ac898684358b01016141d9565b84529284019290840190600101614095565b600082601f8301126140ce578081fd5b813560206140de61401483614d83565b828152818101908583016040808602880185018910156140fc578687fd5b865b868110156141715781838b031215614114578788fd5b815182810181811067ffffffffffffffff8211171561412f57fe5b8352833561413c81614e4c565b8152838701356bffffffffffffffffffffffff8116811461415b57898afd5b81880152855293850193918101916001016140fe565b509198975050505050505050565b600082601f83011261418f578081fd5b8135602061419f61401483614d83565b82815281810190858301838502870184018810156141bb578586fd5b855b8581101561405c578135845292840192908401906001016141bd565b600082601f8301126141e9578081fd5b813567ffffffffffffffff8111156141fd57fe5b614210601f8201601f1916602001614d5f565b818152846020838601011115614224578283fd5b816020850160208301379081016020019190915292915050565b600060c0828403121561424f578081fd5b61425960c0614d5f565b905081358152602082013567ffffffffffffffff8082111561427a57600080fd5b614286858386016141d9565b60208401526040840135604084015260608401359150808211156142a957600080fd5b6142b5858386016140be565b606084015260808401359150808211156142ce57600080fd5b6142da858386016140be565b608084015260a08401359150808211156142f357600080fd5b5061430084828501614069565b60a08301525092915050565b60006020828403121561431d578081fd5b813561159781614e4c565b6000806040838503121561433a578081fd5b823561434581614e4c565b9150602083013561435581614e4c565b809150509250929050565b600080600080600060a08688031215614377578081fd5b853561438281614e4c565b9450602086013561439281614e4c565b9350604086013567ffffffffffffffff808211156143ae578283fd5b6143ba89838a0161417f565b945060608801359150808211156143cf578283fd5b6143db89838a0161417f565b935060808801359150808211156143f0578283fd5b506143fd888289016141d9565b9150509295509295909350565b600080600080600060a08688031215614421578283fd5b853561442c81614e4c565b9450602086013561443c81614e4c565b93506040860135925060608601359150608086013567ffffffffffffffff811115614465578182fd5b6143fd888289016141d9565b600080600060608486031215614485578081fd5b833561449081614e4c565b9250602084013567ffffffffffffffff808211156144ac578283fd5b6144b88783880161417f565b935060408601359150808211156144cd578283fd5b506144da8682870161417f565b9150509250925092565b600080604083850312156144f6578182fd5b823561450181614e4c565b915060208301358015158114614355578182fd5b60008060408385031215614527578182fd5b823561453281614e4c565b946020939093013593505050565b600080600060608486031215614554578081fd5b833561455f81614e4c565b95602085013595506040909401359392505050565b60008060408385031215614586578182fd5b823567ffffffffffffffff8082111561459d578384fd5b6145a986838701613ff4565b935060208501359150808211156145be578283fd5b506145cb8582860161417f565b9150509250929050565b6000602082840312156145e6578081fd5b81356001600160e01b031981168114611597578182fd5b600080600080600060a08688031215614614578283fd5b853567ffffffffffffffff8082111561462b578485fd5b61463789838a016141d9565b9650602088013591508082111561464c578485fd5b61465889838a016141d9565b9550604088013591508082111561466d578485fd5b61467989838a016141d9565b9450606088013591508082111561468e578283fd5b5061469b888289016141d9565b92505060808601356146ac81614e4c565b809150509295509295909350565b600080600080608085870312156146cf578182fd5b843567ffffffffffffffff8111156146e5578283fd5b6146f18782880161423e565b945050602085013561470281614e4c565b9250604085013561471281614e4c565b9396929550929360600135925050565b600080600060608486031215614736578081fd5b833567ffffffffffffffff81111561474c578182fd5b6147588682870161423e565b935050602084013561476981614e4c565b929592945050506040919091013590565b60008060006060848603121561478e578081fd5b833567ffffffffffffffff808211156147a5578283fd5b6147b18783880161423e565b945060208601359150808211156147c6578283fd5b6144b887838801613ff4565b600080600080608085870312156147e7578182fd5b843567ffffffffffffffff808211156147fe578384fd5b61480a8883890161423e565b9550602087013591508082111561481f578384fd5b5061482c878288016141d9565b935050604085013561471281614e4c565b60006020828403121561484e578081fd5b5035919050565b600080600060608486031215614869578081fd5b83359250602084013561487b81614e4c565b9150604084013561488b81614e4c565b809150509250925092565b600080604083850312156148a8578182fd5b50508035926020909101359150565b6000815180845260208085019450808401835b8381101561490857815180516001600160a01b031688528301516bffffffffffffffffffffffff1683880152604090960195908201906001016148ca565b509495945050505050565b60008151808452815b818110156149385760208185018101518683018201520161491c565b818111156149495782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b60006001600160a01b0385168252606060208301526149946060830185614913565b8281036040840152613c168185614913565b6001600160a01b039290921682526bffffffffffffffffffffffff16602082015260400190565b60006020825261159760208301846148b7565b6020808252825182820181905260009190848201906040850190845b81811015614a18578351835292840192918401916001016149fc565b50909695505050505050565b901515815260200190565b6000602082526115976020830184614913565b60208082526010908201527f737570706c7920696e636f727265637400000000000000000000000000000000604082015260600190565b6020808252818101527f43726561746f722073686172652073686f756c6420626520706f736974697665604082015260600190565b60208082526011908201527f746f6b656e496420696e636f7272656374000000000000000000000000000000604082015260600190565b6020808252600b908201527f6e6f7420616c6c6f776564000000000000000000000000000000000000000000604082015260600190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f20616460408201527f6472657373000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526010908201527f616d6f756e7420696e636f727265637400000000000000000000000000000000604082015260600190565b60208082526028908201527f455243313135353a207472616e736665722063616c6c6572206973206e6f742060408201527f617070726f766564000000000000000000000000000000000000000000000000606082015260800190565b60208082526010908201527f6d6f7265207468616e20737570706c7900000000000000000000000000000000604082015260600190565b60208082526019908201527f4163636f756e742073686f756c642062652070726573656e7400000000000000604082015260600190565b6020808252602e908201527f455243313135353a2061646472657373657320616e6420616d6f756e7473206c60408201527f656e677468206d69736d61746368000000000000000000000000000000000000606082015260800190565b6020808252602e908201527f746f74616c20616d6f756e74206f662063726561746f7273207368617265207360408201527f686f756c64206265203130303030000000000000000000000000000000000000606082015260800190565b90815260200190565b600083825260406020830152614d5760408301846148b7565b949350505050565b60405181810167ffffffffffffffff81118282101715614d7b57fe5b604052919050565b600067ffffffffffffffff821115614d9757fe5b5060209081020190565b60e01c90565b600060443d1015614db757610fe6565b600481823e6308c379a0614dcb8251614da1565b14614dd557610fe6565b6040513d600319016004823e80513d67ffffffffffffffff8160248401118184111715614e055750505050610fe6565b82840192508251915080821115614e1f5750505050610fe6565b503d83016020828401011115614e3757505050610fe6565b601f01601f1916810160200160405291505090565b6001600160a01b0381168114612a3357600080fdfe455243313135353a207472616e7366657220746f206e6f6e2045524331313535526563656976657220696d706c656d656e746572455243313135353a204552433131353552656365697665722072656a656374656420746f6b656e73455243313135353a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373455243313135353a206275726e20616d6f756e7420657863656564732062616c616e6365455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656445434453413a20696e76616c6964207369676e6174757265202773272076616c7565455243313135353a207472616e7366657220746f20746865207a65726f2061646472657373455243313135353a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c7565455243313135353a206275726e2066726f6d20746865207a65726f2061646472657373455243313135353a20696e73756666696369656e742062616c616e636520666f72207472616e73666572455243313135353a2073657474696e6720617070726f76616c2073746174757320666f722073656c66455243313135353a206163636f756e747320616e6420696473206c656e677468206d69736d61746368455243313135353a2069647320616e6420616d6f756e7473206c656e677468206d69736d61746368455243313135353a206d696e7420746f20746865207a65726f2061646472657373a26469706673582212206a3a213640cd17a1dca16df148b27960f1c629958eb910bbb7f950c8ae4e6ef364736f6c63430007060033