608060405234801561001057600080fd5b506155f580620000216000396000f3fe608060405234801561001057600080fd5b50600436106104495760003560e01c806386a66f0f11610241578063a694fc3a1161013b578063e63a562e116100c3578063f6a74ed711610087578063f6a74ed714610a0a578063f722655d14610a1d578063f9f92be414610a30578063fc83e96414610a43578063fe575a8714610a7a57600080fd5b8063e63a562e146109a6578063ea5ddd22146109b9578063ed87169c146109cc578063f1a9a9b4146109df578063f21c783b146109f257600080fd5b8063c9bf871f1161010a578063c9bf871f14610947578063ca15c8731461095a578063d547741f1461096d578063d752483d14610980578063dd62ed3e1461099357600080fd5b8063a694fc3a146108e8578063a7fc7a07146108fb578063a9059cbb1461090e578063c03d5b471461092157600080fd5b806394e1aa4d116101c95780639c2d40051161018d5780639c2d400514610887578063a217fddf1461089a578063a22ac5a9146108a2578063a457c2d7146108c2578063a45d6831146108d557600080fd5b806394e1aa4d1461083357806395d89b41146108465780639a5904271461084e5780639ab24eb0146108615780639b19251a1461087457600080fd5b80639010d07c116102105780639010d07c146107d3578063914a66c5146107e657806391d14854146107f957806391ddadf41461080c57806394d490211461082b57600080fd5b806386a66f0f146107875780638843dc9f1461079a5780638aee8127146107ad5780638bd317eb146107c057600080fd5b80633b89bb86116103525780635c19a95c116102da57806370a082311161029e57806370a082311461072b57806375e3661e1461073e57806379cc6790146107515780638456cb591461076457806384b0196e1461076c57600080fd5b80635c19a95c146106d35780635c975abb146106e65780635d00bb12146106f257806363fcd77d14610705578063704802751461071857600080fd5b806340c10f191161032157806340c10f1914610637578063426233601461064a57806342966c681461065d57806354fd4d5014610670578063587cde1e1461069157600080fd5b80633b89bb86146105f65780633da1f79a146106095780633dc01dca1461061c5780633f4ba83a1461062f57600080fd5b806323b872dd116103d5578063313ce567116103a4578063313ce5671461058157806336568abe1461059057806339509351146105a35780633a46b1a8146105b65780633af32abf146105c957600080fd5b806323b872dd14610525578063248a9ca3146105385780632e17de781461055b5780632f2ff15d1461056e57600080fd5b8063092c5b3b1161041c578063092c5b3b146104cf578063095ea7b3146104e45780631785f53c146104f757806318160ddd1461050a57806318b39abc1461051257600080fd5b806301ffc9a71461044e57806306fdde0314610476578063090e0ed4146104a45780630917e776146104b9575b600080fd5b61046161045c366004614bac565b610a8d565b60405190151581526020015b60405180910390f35b60408051808201909152600981526823a7ab102a37b5b2b760b91b60208201525b60405161046d9190614c17565b6104b76104b2366004614c3e565b610ab8565b005b6104c1610b2c565b60405190815260200161046d565b6104c16000805160206155a083398151915281565b6104616104f2366004614c6e565b610b51565b6104b7610505366004614c9a565b610b69565b6035546104c1565b6104b7610520366004614cc8565b610b9b565b610461610533366004614d24565b610cf6565b6104c1610546366004614d65565b600090815260ff602052604090206001015490565b6104b7610569366004614d65565b610d1a565b6104b761057c366004614d7e565b610d6e565b6040516012815260200161046d565b6104b761059e366004614d7e565b610d98565b6104616105b1366004614c6e565b610e16565b6104c16105c4366004614c6e565b610e38565b6104616105d7366004614c9a565b6001600160a01b031660009081526101a0602052604090205460ff1690565b610461610604366004614c6e565b610e7e565b610461610617366004614d65565b6110df565b61046161062a366004614cc8565b611135565b6104b7611267565b6104b7610645366004614c6e565b611298565b6104c1610658366004614c9a565b6112e7565b6104b761066b366004614d65565b611327565b6040805180820190915260058152640312e302e360dc1b6020820152610497565b6106bb61069f366004614c9a565b61019e602052600090815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161046d565b6104b76106e1366004614c9a565b611331565b6101635460ff16610461565b610461610700366004614d65565b61133b565b6104c1610713366004614c9a565b611347565b6104b7610726366004614c9a565b611352565b6104c1610739366004614c9a565b6113dc565b61046161074c366004614c9a565b61140a565b6104b761075f366004614c6e565b61147d565b6104b7611492565b6107746114c1565b60405161046d9796959493929190614dae565b6104b7610795366004614c9a565b61155f565b6104b76107a8366004614cc8565b6115d5565b6104b76107bb366004614c9a565b6116d9565b6104616107ce366004614c6e565b61171f565b6106bb6107e1366004614e44565b61194d565b6104b76107f4366004614c3e565b61196d565b610461610807366004614d7e565b6119cb565b6108146119f4565b60405165ffffffffffff909116815260200161046d565b6104c1600181565b610461610841366004614e66565b611a04565b610497611b37565b61046161085c366004614c9a565b611bc9565b6104c161086f366004614c9a565b611c38565b610461610882366004614c9a565b611c74565b6104c1610895366004614d65565b611d22565b6104c1600081565b6108b56108b0366004614c6e565b611d39565b60405161046d9190614efe565b6104616108d0366004614c6e565b611e0d565b6104616108e3366004614f70565b611e88565b6104b76108f6366004614d65565b6122b3565b6104b7610909366004614c9a565b6122e9565b61046161091c366004614c6e565b612398565b610199546109329063ffffffff1681565b60405163ffffffff909116815260200161046d565b6104c1610955366004614c9a565b6123a6565b6104c1610968366004614d65565b6123b1565b6104b761097b366004614d7e565b6123c9565b6104b761098e366004615006565b6123ee565b6104c16109a136600461503b565b612433565b6104b76109b4366004615069565b61245e565b6104c16109c7366004614c6e565b612502565b6104c16109da366004614c6e565b612538565b6104b76109ed3660046150b2565b6125aa565b6101995461093290600160201b900463ffffffff1681565b6104b7610a18366004614c9a565b61273d565b610461610a2b366004614e66565b61277c565b610461610a3e366004614c9a565b6128da565b6104c1610a51366004614c6e565b6001600160a01b0391909116600090815261019860209081526040808320938352929052205490565b610461610a88366004614c9a565b61294d565b60006001600160e01b03198216635a05180f60e01b1480610ab25750610ab28261296b565b92915050565b610ad06000805160206155a0833981519152336119cb565b80610ae15750610ae16000336119cb565b610b065760405162461bcd60e51b8152600401610afd906150f7565b60405180910390fd5b610199805467ffffffff000000001916600160201b63ffffffff84160217905550565b50565b6000610b43610b3a436129a0565b61019f90612a09565b6001600160e01b0316905090565b600033610b5f818585612abd565b5060019392505050565b610b746000336119cb565b610b905760405162461bcd60e51b8152600401610afd9061512e565b610b29600082612be1565b83431115610bbc5760405163133df02960e01b815260040160405180910390fd5b86600003610bdd576040516310eb483f60e21b815260040160405180910390fd5b604080517fdd820ef372b517fe7ba6b32508bf6ba92f0ebdbe41414d9ef33e3626454147bb6020820152908101889052606081018790526080810186905260a08101859052600090610c5490610c4c9060c0015b60405160208183030381529060405280519060200120612c04565b858585612c31565b905087610c60826112e7565b1015610c7f5760405163a8ded35f60e01b815260040160405180910390fd5b610c898187612c59565b610c9c81610c97898b61517b565b612d0d565b610ca830335b89612e50565b610cbf61019f613006610cba8a613012565b61307b565b50506001600160a01b038116600090815261019a60205260409020610cea90613006610cba8a613012565b50505050505050505050565b600033610d048582856130c4565b610d0f858585612e50565b506001949350505050565b80600003610d3b576040516310eb483f60e21b815260040160405180910390fd5b80610d45336112e7565b1015610d645760405163a8ded35f60e01b815260040160405180910390fd5b610b293382612d0d565b600082815260ff6020526040902060010154610d8981613138565b610d938383613142565b505050565b6001600160a01b0381163314610e085760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610afd565b610e128282612be1565b5050565b600033610b5f818585610e298383612433565b610e33919061518e565b612abd565b6000610e4382613165565b610e6e610e4f836129a0565b6001600160a01b038516600090815261019b6020526040902090612a09565b6001600160e01b03169392505050565b6000610e898361294d565b15610ea75760405163a73abf4960e01b815260040160405180910390fd5b610eb03361294d565b15610ece576040516309550c7760e01b815260040160405180910390fd5b6001600160a01b03838116600090815261019860209081526040808320868452909152902060030154163314610f175760405163710c949760e01b815260040160405180910390fd5b60036001600160a01b03841660009081526101986020908152604080832086845290915290206005015460ff166003811115610f5557610f55614ee8565b1480610f9c575060026001600160a01b03841660009081526101986020908152604080832086845290915290206005015460ff166003811115610f9a57610f9a614ee8565b145b15610fba5760405163bb345d9360e01b815260040160405180910390fd5b6001600160a01b0383166000908152610198602090815260408083208584529091529020600401544311156110025760405163100972e960e31b815260040160405180910390fd5b6001600160a01b038316600081815261019860209081526040808320868452825280832060058101805460ff19166003179055600181015490549484526101979092529091205490916110549161517b565b61105e919061517b565b6001600160a01b03848116600090815261019760209081526040808320949094556101988152838220868352905291909120600281015490546110a49286921690612e50565b6110d683336001600160a01b038616600090815261019860209081526040808320888452909152902060010154612e50565b50600192915050565b6000600160998233856040516020016110f99291906151a1565b60408051808303601f19018152918152815160209283012083529082019290925201600020805460ff1916911515919091179055506001919050565b60004385116111575760405163133df02960e01b815260040160405180910390fd5b6111603361294d565b1561117e5760405163071acf4560e21b815260040160405180910390fd5b604080517f0d7f3631a9349e17985d551db79916c5f402157da5f7b21cbc9e8ad185b87c316020820152908101899052606081018890526080810187905260a081018690526000906111de906111d69060c001610c31565b868686612c31565b90506111e98161294d565b15611207576040516309550c7760e01b815260040160405180910390fd5b6112118188612c59565b61121b888a61518e565b611224826113dc565b101561124357604051631e9acf1760e31b815260040160405180910390fd5b61124d818a613194565b61125881338a612e50565b50600198975050505050505050565b6112726000336119cb565b61128e5760405162461bcd60e51b8152600401610afd9061512e565b6112966132d4565b565b6112b06000805160206155a0833981519152336119cb565b806112c157506112c16000336119cb565b6112dd5760405162461bcd60e51b8152600401610afd906150f7565b610e128282613327565b60006112f2826133f4565b6001600160a01b038316600090815261019a60205260409020611314906134c2565b6001600160e01b0316610ab2919061518e565b610b293382613194565b610b2933826134fb565b6000610ab2338361355f565b6000610ab2826135a8565b61135d6000336119cb565b6113795760405162461bcd60e51b8152600401610afd9061512e565b6113846000826119cb565b156113d15760405162461bcd60e51b815260206004820152601d60248201527f474f563a206163636f756e7420697320616c72656164792061646d696e0000006044820152606401610afd565b610b29600082613142565b60006113e7826135a8565b6001600160a01b038316600090815260336020526040902054610ab2919061518e565b60006114246000805160206155a0833981519152336119cb565b8061143557506114356000336119cb565b6114515760405162461bcd60e51b8152600401610afd906150f7565b6001600160a01b038216600090815260cc60205260409020805460ff191690556001610ab2565b919050565b6114888233836130c4565b610e128282613194565b61149d6000336119cb565b6114b95760405162461bcd60e51b8152600401610afd9061512e565b61129661364d565b6000606080600080600060606065546000801b1480156114e15750606654155b6115255760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606401610afd565b61152d61368b565b61153561369a565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b61156a6000336119cb565b6115865760405162461bcd60e51b8152600401610afd9061512e565b61019680546001810182556000919091527f828feda00a4b64eb35101b6df8f6c29717b1ea6bae5dd03d3ddada8de0a9e7cb0180546001600160a01b0319166001600160a01b03831617905550565b834311156115f65760405163133df02960e01b815260040160405180910390fd5b86600003611617576040516310eb483f60e21b815260040160405180910390fd5b604080517f75a91dfca162a0c9322a49bf657ff752af0cdfe0c7717868f0112486ffb3c9236020820152908101889052606081018790526080810186905260a0810185905260009061166f90610c4c9060c001610c31565b905061167b878961518e565b611684826113dc565b10156116a357604051631e9acf1760e31b815260040160405180910390fd5b6116ad8187612c59565b6116b881308a610cf6565b506116c4813389610cf6565b506116cf81896136a9565b5050505050505050565b6116e46000336119cb565b6117005760405162461bcd60e51b8152600401610afd9061512e565b61019580546001600160a01b0319166001600160a01b03831617905550565b600061172a8361294d565b156117485760405163a73abf4960e01b815260040160405180910390fd5b6117513361294d565b1561176f576040516309550c7760e01b815260040160405180910390fd5b6001600160a01b038381166000908152610198602090815260408083208684529091529020600301541633148015906117b15750336001600160a01b03841614155b156117cf5760405163710c949760e01b815260040160405180910390fd5b6001600160a01b038316600090815261019860209081526040808320858452909152902060040154431161181657604051634e12fa5d60e01b815260040160405180910390fd5b60026001600160a01b03841660009081526101986020908152604080832086845290915290206005015460ff16600381111561185457611854614ee8565b03611872576040516347e9034960e11b815260040160405180910390fd5b60036001600160a01b03841660009081526101986020908152604080832086845290915290206005015460ff1660038111156118b0576118b0614ee8565b036118ce57604051631eefe38360e11b815260040160405180910390fd5b6001600160a01b038316600081815261019860209081526040808320868452825280832060058101805460ff19166002179055600181015490549484526101979092529091205490916119209161517b565b61192a919061517b565b6001600160a01b0384166000908152610197602052604090205550600192915050565b6000828152610131602052604081206119669083613757565b9392505050565b6119856000805160206155a0833981519152336119cb565b8061199657506119966000336119cb565b6119b25760405162461bcd60e51b8152600401610afd906150f7565b610199805463ffffffff191663ffffffff831617905550565b600091825260ff602081815260408085206001600160a01b039490941685529290529120541690565b60006119ff43613763565b905090565b6000611a0f8a61294d565b15611a2d5760405163471dcefb60e01b815260040160405180910390fd5b611a368961294d565b15611a545760405163320cd62d60e11b815260040160405180910390fd5b6001600160a01b038916611a7b57604051635461585f60e01b815260040160405180910390fd5b438511611a9b5760405163133df02960e01b815260040160405180910390fd5b611aa58a87612c59565b611aeb610c4c7f3830559a61f21190fa6877e04b1ba33917e16aa3288215baf45853aed9d30c2b60001b8c8c8c8c8c8c604051602001610c3197969594939291906151d9565b6001600160a01b03168a6001600160a01b031614611b1c57604051638baa579f60e01b815260040160405180910390fd5b611b278a8a8a612abd565b5060019998505050505050505050565b606060378054611b4690615215565b80601f0160208091040260200160405190810160405280929190818152602001828054611b7290615215565b8015611bbf5780601f10611b9457610100808354040283529160200191611bbf565b820191906000526020600020905b815481529060010190602001808311611ba257829003601f168201915b5050505050905090565b6000611be36000805160206155a0833981519152336119cb565b80611bf45750611bf46000336119cb565b611c105760405162461bcd60e51b8152600401610afd906150f7565b6001600160a01b03821660009081526101a060205260409020805460ff191690556001610ab2565b6000611c65611c46436129a0565b6001600160a01b038416600090815261019b6020526040902090612a09565b6001600160e01b031692915050565b6000611c8e6000805160206155a0833981519152336119cb565b80611c9f5750611c9f6000336119cb565b611cbb5760405162461bcd60e51b8152600401610afd906150f7565b6001600160a01b038216600090815260cc602052604090205460ff1615611cf5576040516309550c7760e01b815260040160405180910390fd5b610ab2826001600160a01b031660009081526101a060205260409020805460ff1916600190811790915590565b6000611d2d82613165565b611c65610b3a836129a0565b611d6f6040805160c08101825260008082526020820181905291810182905260608101829052608081018290529060a082015290565b6001600160a01b03808416600090815261019860209081526040808320868452825291829020825160c0810184528154815260018201549281019290925260028101548416928201929092526003808301549093166060820152600482015460808201526005820154909260a084019160ff1690811115611df257611df2614ee8565b6003811115611e0357611e03614ee8565b9052509392505050565b60003381611e1b8286612433565b905083811015611e7b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610afd565b610d0f8286868403612abd565b6000611e938b61294d565b15611eb15760405163a73abf4960e01b815260040160405180910390fd5b611eba8a61294d565b15611ed85760405163577290d560e11b815260040160405180910390fd5b611ee18961294d565b15611eff5760405163256b00b760e01b815260040160405180910390fd5b6001600160a01b038a161580611f1c57506001600160a01b038916155b15611f3a5760405163a3f5440960e01b815260040160405180910390fd5b438511611f5a5760405163100972e960e31b815260040160405180910390fd5b611f64878961518e565b611f6d8c6113dc565b1015611f8c57604051631e9acf1760e31b815260040160405180910390fd5b611f968b87612c59565b604080517f57e5f764e03597668021abeaacf51af394f1469f65cfee690464f59560063ddb60208201526001600160a01b03808e169282018390528c811660608301528b16608082015260a081018a905260c0810189905260e08101889052610100810187905261200e906111d69061012001610c31565b6001600160a01b03161461207a5760405162461bcd60e51b815260206004820152602d60248201527f4574686c65737352657365727661626c653a3a726573657276653a20696e766160448201526c6c6964207369676e617475726560981b6064820152608401610afd565b8761019860008d6001600160a01b03166001600160a01b031681526020019081526020016000206000888152602001908152602001600020600001819055508661019860008d6001600160a01b03166001600160a01b031681526020019081526020016000206000888152602001908152602001600020600101819055508961019860008d6001600160a01b03166001600160a01b03168152602001908152602001600020600088815260200190815260200160002060020160006101000a8154816001600160a01b0302191690836001600160a01b031602179055508861019860008d6001600160a01b03166001600160a01b03168152602001908152602001600020600088815260200190815260200160002060030160006101000a8154816001600160a01b0302191690836001600160a01b031602179055508461019860008d6001600160a01b03166001600160a01b03168152602001908152602001600020600088815260200190815260200160002060040181905550600161019860008d6001600160a01b03166001600160a01b03168152602001908152602001600020600088815260200190815260200160002060050160006101000a81548160ff0219169083600381111561225257612252614ee8565b02179055506001600160a01b038b1660009081526101976020526040902054879061227e908a9061518e565b612288919061518e565b6001600160a01b038c16600090815261019760205260409020555060019a9950505050505050505050565b806000036122d4576040516310eb483f60e21b815260040160405180910390fd5b6122df333083612e50565b610b2933826136a9565b6122f46000336119cb565b6123105760405162461bcd60e51b8152600401610afd9061512e565b6123286000805160206155a0833981519152826119cb565b156123805760405162461bcd60e51b815260206004820152602260248201527f474f563a206163636f756e7420697320616c726561647920636f6e74726f6c6c60448201526132b960f11b6064820152608401610afd565b610b296000805160206155a083398151915282613142565b600033610b5f818585612e50565b6000610ab2826133f4565b600081815261013160205260408120610ab2906137ca565b600082815260ff60205260409020600101546123e481613138565b610d938383612be1565b6124066000805160206155a0833981519152336119cb565b8061241757506124176000336119cb565b610e125760405162461bcd60e51b8152600401610afd906150f7565b6001600160a01b03918216600090815260346020908152604080832093909416825291909152205490565b8342111561247f5760405163133df02960e01b815260040160405180910390fd5b604080517f8162df01ffb3935fe13189cea968d8803ccada7082c370b048e4f69f553aa44c60208201526001600160a01b03891691810191909152606081018790526080810186905260a081018590526000906124e290610c4c9060c001610c31565b90506124ee8187612c59565b6124f881896134fb565b6116cf8133610ca2565b600061250d82613165565b610e6e612519836129a0565b6001600160a01b038516600090815261019a6020526040902090612a09565b60405163752eee9160e11b81526001600160a01b038316600482015260248101829052600090309063ea5ddd2290604401602060405180830381865afa158015612586573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611966919061524f565b600054610100900460ff16158080156125ca5750600054600160ff909116105b806125e45750303b1580156125e4575060005460ff166001145b6126475760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610afd565b6000805460ff19166001179055801561266a576000805461ff0019166101001790555b6126726137d4565b61267a613803565b6126c46126a360408051808201909152600981526823a7ab102a37b5b2b760b91b602082015290565b6040805180820190915260058152640312e302e360dc1b6020820152613832565b6126ce8383613863565b6126d9600033613142565b6126f16000805160206155a083398151915285613142565b8015612737576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6127486000336119cb565b6127645760405162461bcd60e51b8152600401610afd9061512e565b610b296000805160206155a083398151915282612be1565b60006127878a61294d565b156127a55760405163a73abf4960e01b815260040160405180910390fd5b6127ae8961294d565b156127cc5760405163577290d560e11b815260040160405180910390fd5b6001600160a01b0389166127f357604051634e46966960e11b815260040160405180910390fd5b4385116128135760405163133df02960e01b815260040160405180910390fd5b61281d8a87612c59565b612863610c4c7fbef22e4c0908948604358f01552eede6b5fd7603530fa218a700749242e3490d60001b8c8c8c8c8c8c604051602001610c3197969594939291906151d9565b6001600160a01b03168a6001600160a01b03161461289457604051638baa579f60e01b815260040160405180910390fd5b61289e878961518e565b6128a78b6113dc565b10156128c657604051631e9acf1760e31b815260040160405180910390fd5b611b278a8a6128d58a8c61518e565b612e50565b60006128f46000805160206155a0833981519152336119cb565b8061290557506129056000336119cb565b6129215760405162461bcd60e51b8152600401610afd906150f7565b610ab2826001600160a01b0316600090815260cc60205260409020805460ff1916600190811790915590565b6001600160a01b0316600090815260cc602052604090205460ff1690565b60006001600160e01b03198216637965db0b60e01b1480610ab257506301ffc9a760e01b6001600160e01b0319831614610ab2565b600063ffffffff821115612a055760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201526532206269747360d01b6064820152608401610afd565b5090565b815460009081816005811115612a66576000612a2484613894565b612a2e908561517b565b60008881526020902090915081015463ffffffff9081169087161015612a5657809150612a64565b612a6181600161518e565b92505b505b6000612a748787858561397c565b90508015612aaf57612a9987612a8b60018461517b565b600091825260209091200190565b54600160201b90046001600160e01b0316612ab2565b60005b979650505050505050565b6001600160a01b038316612b1f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610afd565b6001600160a01b038216612b805760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610afd565b6001600160a01b0383811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b612beb82826139da565b600082815261013160205260409020610d939082613a41565b6000610ab2612c11613a56565b8360405161190160f01b8152600281019290925260228201526042902090565b6000806000612c4287878787613a60565b91509150612c4f81613b24565b5095945050505050565b612c63828261355f565b15612cbc5760405162461bcd60e51b8152602060048201526024808201527f5369676e65724e6f6e63653a3a7573654e6f6e63653a20496e76616c6964204e6044820152636f6e636560e01b6064820152608401610afd565b6001609960008484604051602001612cd59291906151a1565b60408051808303601f19018152918152815160209283012083529082019290925201600020805460ff19169115159190911790555050565b612d168261294d565b15612d34576040516309550c7760e01b815260040160405180910390fd5b612d3d82613c6e565b612d4682613d43565b612d5861019f613006610cba84613012565b50506001600160a01b038216600090815261019a60205260409020612d8390613006610cba84613012565b5050612d8f8282613e67565b6001600160a01b038216600090815261019d602090815260409182902082518084019093526001600160801b038416835261019954612df5939192820190612de490600160201b900463ffffffff1643615268565b67ffffffffffffffff169052613ea4565b6101995460408051838152600160201b90920463ffffffff16602083015243916001600160a01b038516917f55c97fc160eaa195f58ede0abb96016c032d01843339cd91f715434c62bc8d1491015b60405180910390a35050565b6001600160a01b038316612eb45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610afd565b6001600160a01b038216612f165760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610afd565b612f21838383613eae565b6001600160a01b03831660009081526033602052604090205481811015612f995760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610afd565b6001600160a01b0380851660008181526033602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612ff99086815260200190565b60405180910390a3612737565b60006119668284615289565b60006001600160e01b03821115612a055760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20326044820152663234206269747360c81b6064820152608401610afd565b6000806130b761309961308c6119f4565b65ffffffffffff166129a0565b6130af6130a5886134c2565b868863ffffffff16565b879190613f87565b915091505b935093915050565b60006130d08484612433565b90506000198114612737578181101561312b5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610afd565b6127378484848403612abd565b610b298133613f95565b61314c8282613fee565b600082815261013160205260409020610d939082614074565b61316d6119f4565b65ffffffffffff168110610b295760405163014bf66160e11b815260040160405180910390fd5b6001600160a01b0382166131f45760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610afd565b61320082600083613eae565b6001600160a01b038216600090815260336020526040902054818110156132745760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610afd565b6001600160a01b03831660008181526033602090815260408083208686039055603580548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b6132dc614089565b610163805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b03821661337d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610afd565b61338960008383613eae565b806035600082825461339b919061518e565b90915550506001600160a01b0382166000818152603360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038116600090815261019c6020526040812080548291829163ffffffff165b601e83613426816152a9565b945010156134b85763ffffffff8116600090815260018301602052604090205443600160801b90910467ffffffffffffffff1610801561346e5750600061346c836140d3565b115b1561349d5763ffffffff8116600090815260018084016020526040909120546001600160801b03169490940193015b815463ffffffff600160201b9091048116908216111561341a575b5091949350505050565b805460009080156134f2576134dc83612a8b60018461517b565b54600160201b90046001600160e01b0316611966565b60009392505050565b6001600160a01b03808316600090815261019e602052604081205490911690613523846112e7565b6001600160a01b03858116600090815261019e6020526040902080546001600160a01b031916918616919091179055905061273782848361412a565b60006099600084846040516020016135789291906151a1565b60408051808303601f190181529181528151602092830120835290820192909252016000205460ff169392505050565b6001600160a01b038116600090815261019d60205260408120805482919063ffffffff165b815463ffffffff600160201b9091048116908216116136445763ffffffff8116600090815260018301602052604090205443600160801b90910467ffffffffffffffff16116136445763ffffffff811660009081526001830160205260409020546001600160801b031692909201916001016135cd565b50909392505050565b6136556141ec565b610163805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861330a3390565b606060678054611b4690615215565b606060688054611b4690615215565b6001600160a01b038216600090815261019c602090815260409182902082518084019093526001600160801b0384168352610199546136f7939192820190612de49063ffffffff1643615268565b61370182836134fb565b61370a82613d43565b610199546040805183815263ffffffff909216602083015243916001600160a01b038516917f4f626560831ba86f58cef261041f765b942160b0ca30ea4eff9e522613974dd59101612e44565b60006119668383614233565b600065ffffffffffff821115612a055760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203460448201526538206269747360d01b6064820152608401610afd565b6000610ab2825490565b600054610100900460ff166137fb5760405162461bcd60e51b8152600401610afd906152c2565b61129661425d565b600054610100900460ff1661382a5760405162461bcd60e51b8152600401610afd906152c2565b611296614284565b600054610100900460ff166138595760405162461bcd60e51b8152600401610afd906152c2565b610e1282826142b8565b600054610100900460ff1661388a5760405162461bcd60e51b8152600401610afd906152c2565b610e128282614307565b6000816000036138a657506000919050565b600060016138b38461435b565b901c6001901b905060018184816138cc576138cc61530d565b048201901c905060018184816138e4576138e461530d565b048201901c905060018184816138fc576138fc61530d565b048201901c905060018184816139145761391461530d565b048201901c9050600181848161392c5761392c61530d565b048201901c905060018184816139445761394461530d565b048201901c9050600181848161395c5761395c61530d565b048201901c9050611966818285816139765761397661530d565b046143ef565b60005b818310156139d25760006139938484614405565b60008781526020902090915063ffffffff86169082015463ffffffff1611156139be578092506139cc565b6139c981600161518e565b93505b5061397f565b509392505050565b6139e482826119cb565b15610e1257600082815260ff602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000611966836001600160a01b038416614420565b60006119ff61451a565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115613a975750600090506003613b1b565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015613aeb573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116613b1457600060019250925050613b1b565b9150600090505b94509492505050565b6000816004811115613b3857613b38614ee8565b03613b405750565b6001816004811115613b5457613b54614ee8565b03613ba15760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610afd565b6002816004811115613bb557613bb5614ee8565b03613c025760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610afd565b6003816004811115613c1657613c16614ee8565b03610b295760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610afd565b6001600160a01b038116600090815261019d60205260408120805463ffffffff165b601e83613c9c816152a9565b945010156127375763ffffffff8116600090815260018301602052604090205443600160801b90910467ffffffffffffffff16108015613ce457506000613ce2836140d3565b115b15613d255763ffffffff81166000908152600183016020526040902054613d1790309086906001600160801b0316612e50565b613d208261458e565b506001015b815463ffffffff600160201b90910481169082161161273757613c90565b6001600160a01b038116600090815261019c60205260408120805482919063ffffffff165b601e83613d74816152a9565b94501015613e105763ffffffff8116600090815260018301602052604090205443600160801b90910467ffffffffffffffff16108015613dbc57506000613dba836140d3565b115b15613df55763ffffffff8116600090815260018084016020526040909120546001600160801b0316949094019301613df38261458e565b505b815463ffffffff600160201b90910481169082161115613d68575b8315613e60576001600160a01b038516600090815261019a60205260409020613e3f906145ab610cba87613012565b5050613e5361019f6145ab610cba87613012565b5050613e6085868661412a565b5050505050565b6001600160a01b03808316600090815261019e602090815260408083205490931680835261019b909152919020613e6090613006610cba85613012565b610e1282826145b7565b613eb66141ec565b6001600160a01b03831615613f13576001600160a01b038316600090815261019760205260409020548190613eea856113dc565b613ef4919061517b565b1015613f1357604051631e9acf1760e31b815260040160405180910390fd5b6001600160a01b038316600090815260cc602052604090205460ff1615613f4d5760405163a73abf4960e01b815260040160405180910390fd5b6001600160a01b038216600090815260cc602052604090205460ff1615610d935760405163577290d560e11b815260040160405180910390fd5b6000806130b7858585614667565b613f9f82826119cb565b610e1257613fac81614806565b613fb7836020614818565b604051602001613fc8929190615323565b60408051601f198184030181529082905262461bcd60e51b8252610afd91600401614c17565b613ff882826119cb565b610e1257600082815260ff602090815260408083206001600160a01b03851684529091529020805460ff191660011790556140303390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000611966836001600160a01b0384166149b4565b6101635460ff166112965760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610afd565b805460009063ffffffff808216600160201b9092041610156140f757506000919050565b81546141139063ffffffff80821691600160201b900416615398565b61411e9060016153b5565b63ffffffff1692915050565b8060000361413757505050565b816001600160a01b0316836001600160a01b0316146141c3576001600160a01b0383161561418b576001600160a01b038316600090815261019b6020526040902061418890613006610cba84613012565b50505b6001600160a01b03821615610d93576001600160a01b038216600090815261019b60205260409020613e60906145ab610cba84613012565b6001600160a01b038216600090815261019b60205260409020613e60906145ab610cba84613012565b6101635460ff16156112965760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610afd565b600082600001828154811061424a5761424a6153d2565b9060005260206000200154905092915050565b600054610100900460ff166112965760405162461bcd60e51b8152600401610afd906152c2565b600054610100900460ff166142ab5760405162461bcd60e51b8152600401610afd906152c2565b610163805460ff19169055565b600054610100900460ff166142df5760405162461bcd60e51b8152600401610afd906152c2565b60676142eb8382615436565b5060686142f88282615436565b50506000606581905560665550565b600054610100900460ff1661432e5760405162461bcd60e51b8152600401610afd906152c2565b610199805463ffffffff928316600160201b0267ffffffffffffffff199091169390921692909217179055565b600080608083901c1561437057608092831c92015b604083901c1561438257604092831c92015b602083901c1561439457602092831c92015b601083901c156143a657601092831c92015b600883901c156143b857600892831c92015b600483901c156143ca57600492831c92015b600283901c156143dc57600292831c92015b600183901c15610ab25760010192915050565b60008183106143fe5781611966565b5090919050565b600061441460028484186154f6565b6119669084841661518e565b6000818152600183016020526040812054801561450957600061444460018361517b565b85549091506000906144589060019061517b565b90508181146144bd576000866000018281548110614478576144786153d2565b906000526020600020015490508087600001848154811061449b5761449b6153d2565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806144ce576144ce615518565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610ab2565b6000915050610ab2565b5092915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f614545614a03565b61454d614a5c565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6040805180820190915260008082526020820152610ab282614a8d565b6000611966828461552e565b815463ffffffff166000036145d557815463ffffffff191660011782555b8082600101600084600001600481819054906101000a900463ffffffff166145fc9061554e565b825463ffffffff9182166101009390930a8381029202191617909155815260208082019290925260400160002082518154939092015167ffffffffffffffff16600160801b026001600160c01b03199093166001600160801b03909216919091179190911790555050565b8254600090819080156147ad57600061468587612a8b60018561517b565b60408051808201909152905463ffffffff808216808452600160201b9092046001600160e01b0316602084015291925090871610156147065760405162461bcd60e51b815260206004820152601b60248201527f436865636b706f696e743a2064656372656173696e67206b65797300000000006044820152606401610afd565b805163ffffffff80881691160361474e578461472788612a8b60018661517b565b80546001600160e01b0392909216600160201b0263ffffffff90921691909117905561479d565b6040805180820190915263ffffffff80881682526001600160e01b0380881660208085019182528b54600181018d5560008d81529190912094519151909216600160201b029216919091179101555b6020015192508391506130bc9050565b50506040805180820190915263ffffffff80851682526001600160e01b0380851660208085019182528854600181018a5560008a815291822095519251909316600160201b0291909316179201919091559050816130bc565b6060610ab26001600160a01b03831660145b60606000614827836002615571565b61483290600261518e565b67ffffffffffffffff81111561484a5761484a6151c3565b6040519080825280601f01601f191660200182016040528015614874576020820181803683370190505b509050600360fc1b8160008151811061488f5761488f6153d2565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106148be576148be6153d2565b60200101906001600160f81b031916908160001a90535060006148e2846002615571565b6148ed90600161518e565b90505b6001811115614965576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110614921576149216153d2565b1a60f81b828281518110614937576149376153d2565b60200101906001600160f81b031916908160001a90535060049490941c9361495e81615588565b90506148f0565b5083156119665760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610afd565b60008181526001830160205260408120546149fb57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610ab2565b506000610ab2565b600080614a0e61368b565b805190915015614a25578051602090910120919050565b6065548015614a345792915050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4709250505090565b600080614a6761369a565b805190915015614a7e578051602090910120919050565b6066548015614a345792915050565b604080518082019091526000808252602082015281614aab81614b82565b15614aea5760405162461bcd60e51b815260206004820152600f60248201526e28bab2bab29034b99032b6b83a3c9760891b6044820152606401610afd565b825463ffffffff16600081815260018501602081815260408084208151808301909252546001600160801b0381168252600160801b900467ffffffffffffffff16918101919091529450918582614b408361554e565b82546101009290920a63ffffffff818102199093169183160217909155168152602081019190915260400160002080546001600160c01b031916905550919050565b6000614b8d826140d3565b1592915050565b80356001600160e01b03198116811461147857600080fd5b600060208284031215614bbe57600080fd5b61196682614b94565b60005b83811015614be2578181015183820152602001614bca565b50506000910152565b60008151808452614c03816020860160208601614bc7565b601f01601f19169290920160200192915050565b6020815260006119666020830184614beb565b803563ffffffff8116811461147857600080fd5b600060208284031215614c5057600080fd5b61196682614c2a565b6001600160a01b0381168114610b2957600080fd5b60008060408385031215614c8157600080fd5b8235614c8c81614c59565b946020939093013593505050565b600060208284031215614cac57600080fd5b813561196681614c59565b803560ff8116811461147857600080fd5b600080600080600080600060e0888a031215614ce357600080fd5b87359650602088013595506040880135945060608801359350614d0860808901614cb7565b925060a0880135915060c0880135905092959891949750929550565b600080600060608486031215614d3957600080fd5b8335614d4481614c59565b92506020840135614d5481614c59565b929592945050506040919091013590565b600060208284031215614d7757600080fd5b5035919050565b60008060408385031215614d9157600080fd5b823591506020830135614da381614c59565b809150509250929050565b60ff60f81b881681526000602060e081840152614dce60e084018a614beb565b8381036040850152614de0818a614beb565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015614e3257835183529284019291840191600101614e16565b50909c9b505050505050505050505050565b60008060408385031215614e5757600080fd5b50508035926020909101359150565b60008060008060008060008060006101208a8c031215614e8557600080fd5b8935614e9081614c59565b985060208a0135614ea081614c59565b975060408a0135965060608a0135955060808a0135945060a08a01359350614eca60c08b01614cb7565b925060e08a013591506101008a013590509295985092959850929598565b634e487b7160e01b600052602160045260246000fd5b600060c0820190508251825260208301516020830152604083015160018060a01b03808216604085015280606086015116606085015250506080830151608083015260a083015160048110614f6357634e487b7160e01b600052602160045260246000fd5b8060a08401525092915050565b6000806000806000806000806000806101408b8d031215614f9057600080fd5b8a35614f9b81614c59565b995060208b0135614fab81614c59565b985060408b0135614fbb81614c59565b975060608b0135965060808b0135955060a08b0135945060c08b01359350614fe560e08c01614cb7565b92506101008b013591506101208b013590509295989b9194979a5092959850565b6000806040838503121561501957600080fd5b823561502481614c59565b915061503260208401614b94565b90509250929050565b6000806040838503121561504e57600080fd5b823561505981614c59565b91506020830135614da381614c59565b600080600080600080600060e0888a03121561508457600080fd5b873561508f81614c59565b9650602088013595506040880135945060608801359350614d0860808901614cb7565b6000806000606084860312156150c757600080fd5b83356150d281614c59565b92506150e060208501614c2a565b91506150ee60408501614c2a565b90509250925092565b6020808252601d908201527f474f563a20434f4e54524f4c4c455220726f6c65207265717569726564000000604082015260600190565b60208082526018908201527f474f563a2041444d494e20726f6c652072657175697265640000000000000000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b81810381811115610ab257610ab2615165565b80820180821115610ab257610ab2615165565b60609290921b6bffffffffffffffffffffffff19168252601482015260340190565b634e487b7160e01b600052604160045260246000fd5b9687526001600160a01b0395861660208801529390941660408601526060850191909152608084015260a083019190915260c082015260e00190565b600181811c9082168061522957607f821691505b60208210810361524957634e487b7160e01b600052602260045260246000fd5b50919050565b60006020828403121561526157600080fd5b5051919050565b67ffffffffffffffff81811683821601908082111561451357614513615165565b6001600160e01b0382811682821603908082111561451357614513615165565b6000600182016152bb576152bb615165565b5060010190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835161535b816017850160208801614bc7565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161538c816028840160208801614bc7565b01602801949350505050565b63ffffffff82811682821603908082111561451357614513615165565b63ffffffff81811683821601908082111561451357614513615165565b634e487b7160e01b600052603260045260246000fd5b601f821115610d9357600081815260208120601f850160051c8101602086101561540f5750805b601f850160051c820191505b8181101561542e5782815560010161541b565b505050505050565b815167ffffffffffffffff811115615450576154506151c3565b6154648161545e8454615215565b846153e8565b602080601f83116001811461549957600084156154815750858301515b600019600386901b1c1916600185901b17855561542e565b600085815260208120601f198616915b828110156154c8578886015182559484019460019091019084016154a9565b50858210156154e65787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60008261551357634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603160045260246000fd5b6001600160e01b0381811683821601908082111561451357614513615165565b600063ffffffff80831681810361556757615567615165565b6001019392505050565b8082028115828204841417610ab257610ab2615165565b60008161559757615597615165565b50600019019056fe7b765e0e932d348852a6f810bfa1ab891e259123f02db8cdcde614c570223357a2646970667358221220dc7f3bba8c3adb0898a59158475c5556c277dd2d11707f4c99d93aacb8d626c864736f6c63430008130033