0x60a060405234801562000010575f80fd5b506040516200493f3803806200493f83398101604081905262000033916200010f565b6001600160401b0381166080526200004a62000051565b506200013e565b5f54610100900460ff1615620000bd5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff908116146200010d575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b5f6020828403121562000120575f80fd5b81516001600160401b038116811462000137575f80fd5b9392505050565b6080516147e16200015e5f395f81816105ec0152613a7b01526147e15ff3fe608060405260043610610306575f3560e01c8063728cdbca11610191578063b35dac4e116100dc578063ddd8a3dc11610087578063e3fff1dd11610062578063e3fff1dd146109b1578063f2fde38b146109d0578063fb1e8b04146109ef575f80fd5b8063ddd8a3dc1461095e578063de8b30351461097d578063dff7827e1461099c575f80fd5b8063cd4edc69116100b7578063cd4edc6914610917578063ce5db8d61461092a578063d279c1911461093f575f80fd5b8063b35dac4e146108ba578063b3e0a509146108d9578063bedb86fb146108f8575f80fd5b8063a415d8dc1161013c578063abc8d68d11610117578063abc8d68d1461085b578063b31a77d314610886578063b34844251461089b575f80fd5b8063a415d8dc146107f9578063a479265d14610827578063a4f209b01461083c575f80fd5b80638f1d37761161016c5780638f1d3776146106f9578063910129d4146107a957806397fc007c146107da575f80fd5b8063728cdbca146106a457806388b1ea09146106c35780638da5cb5b146106dc575f80fd5b80632b7ac3f3116102515780635ef7a94a116101fc57806368589dfa116101d757806368589dfa146106465780636c578c1d14610671578063715018a614610690575f80fd5b80635ef7a94a1461057b5780635f77cf1d146105db5780636126729014610627575f80fd5b80634a8d544f1161022c5780634a8d544f1461053257806357e0af6c146105455780635c975abb14610564575f80fd5b80632b7ac3f3146104c75780633b70c18a146104fe5780633e001b661461051d575f80fd5b806313361101116102b157806321e2f9e01161028c57806321e2f9e0146104525780632362f03e146104715780632571098d1461049c575f80fd5b806313361101146103ee57806318463fb01461040d57806318af3b2b14610422575f80fd5b806310d44583116102e157806310d4458314610398578063116a1f42146103b7578063121dcd50146103d9575f80fd5b806304d7721514610311578063059def61146103545780630ceb678014610377575f80fd5b3661030d57005b5f80fd5b34801561031c575f80fd5b5061033f61032b3660046140f4565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561035f575f80fd5b50610369609d5481565b60405190815260200161034b565b348015610382575f80fd5b50610396610391366004614126565b610a04565b005b3480156103a3575f80fd5b506103966103b2366004614184565b610ad6565b3480156103c2575f80fd5b5061033f6103d13660046140f4565b609d54101590565b3480156103e4575f80fd5b50610369609e5481565b3480156103f9575f80fd5b506103966104083660046141cc565b610e2f565b348015610418575f80fd5b5061036960a75481565b34801561042d575f80fd5b5061033f61043c3660046140f4565b5f90815260a26020526040902060010154421090565b34801561045d575f80fd5b5061033f61046c3660046140f4565b611326565b34801561047c575f80fd5b5061036961048b3660046140f4565b60a16020525f908152604090205481565b3480156104a7575f80fd5b506103696104b63660046140f4565b60a06020525f908152604090205481565b3480156104d2575f80fd5b50609c546104e6906001600160a01b031681565b6040516001600160a01b03909116815260200161034b565b348015610509575f80fd5b50609b546104e6906001600160a01b031681565b348015610528575f80fd5b5061036960aa5481565b61039661054036600461420b565b611354565b348015610550575f80fd5b5061039661055f3660046140f4565b611bd7565b34801561056f575f80fd5b5060655460ff1661033f565b348015610586575f80fd5b506105bb6105953660046140f4565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b60408051948552602085019390935291830152606082015260800161034b565b3480156105e6575f80fd5b5061060e7f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff909116815260200161034b565b348015610632575f80fd5b506103966106413660046140f4565b611c82565b348015610651575f80fd5b506103696106603660046140f4565b60ab6020525f908152604090205481565b34801561067c575f80fd5b5061039661068b366004614126565b611e97565b34801561069b575f80fd5b50610396611f54565b3480156106af575f80fd5b506103966106be366004614278565b611f67565b3480156106ce575f80fd5b5060a65461033f9060ff1681565b3480156106e7575f80fd5b506033546001600160a01b03166104e6565b348015610704575f80fd5b506107656107133660046140f4565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff831693680100000000000000009093046001600160a01b0316929060ff8082169161010090041686565b6040805167ffffffffffffffff90971687526001600160a01b03909516602087015293850192909252606084015215156080830152151560a082015260c00161034b565b3480156107b4575f80fd5b5061033f6107c33660046140f4565b5f90815260a4602052604090206003015460ff1690565b3480156107e5575f80fd5b506103966107f4366004614126565b6122aa565b348015610804575f80fd5b5061033f610813366004614126565b609f6020525f908152604090205460ff1681565b348015610832575f80fd5b5061036960995481565b348015610847575f80fd5b506103966108563660046140f4565b61238d565b348015610866575f80fd5b50610369610875366004614126565b60a56020525f908152604090205481565b348015610891575f80fd5b5061036960a85481565b3480156108a6575f80fd5b506103966108b53660046142d3565b61243d565b3480156108c5575f80fd5b506103966108d4366004614126565b612682565b3480156108e4575f80fd5b506103966108f33660046141cc565b6126db565b348015610903575f80fd5b50610396610912366004614347565b612a2b565b610396610925366004614362565b612b86565b348015610935575f80fd5b5061036960985481565b34801561094a575f80fd5b50610396610959366004614126565b613152565b348015610969575f80fd5b506097546104e6906001600160a01b031681565b348015610988575f80fd5b5061033f6109973660046140f4565b613211565b3480156109a7575f80fd5b50610369609a5481565b3480156109bc575f80fd5b506103966109cb3660046140f4565b61325b565b3480156109db575f80fd5b506103966109ea366004614126565b6132fe565b3480156109fa575f80fd5b5061036960a95481565b610a0c61338b565b6001600160a01b0381165f908152609f602052604090205460ff1615610a795760405162461bcd60e51b815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b6001600160a01b0381165f818152609f6020908152604091829020805460ff1916600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610ade61338b565b5f8111610b2d5760405162461bcd60e51b815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610a70565b5f80610b3985856133e5565b915091505f610b4c836001015160c01c90565b5f81815260a160205260409020549091508214610bab5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610a70565b5f60a181610bb987856143c5565b81526020019081526020015f205414610c395760405162461bcd60e51b8152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610a70565b609d548111610cb05760405162461bcd60e51b815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610a70565b610cbb6001826143d8565b609e555b8315610e2757604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610d0781613211565b15610d62575f81815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a59092528220805491929091610d529084906143c5565b909155505060a6805460ff191690555b5f81815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a85415801590610ddf575060a85481145b15610de9575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610cbf575b505050505050565b60a85415610e7f5760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610a70565b610e87613400565b5f80610e9384846133e5565b915091505f610ea6836001015160c01c90565b5f81815260a160205260409020549091508214610f055760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610a70565b610f0e81611326565b610f5a5760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610a70565b610f6381613211565b15610fb05760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610a70565b5f81815260a4602052604090206003015460ff16156110115760405162461bcd60e51b815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610a70565b5f81815260a260205260409020600101544210156110715760405162461bcd60e51b815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610a70565b605983015160a05f6110846001856143d8565b81526020019081526020015f2054146110df5760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610a70565b5f81815260a060205260409020541561113a5760405162461bcd60e51b815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610a70565b80609d546001011461118e5760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610a70565b609d819055600160a35f6111a3866099015190565b815260208101919091526040015f20805460ff191691151591909117905560798301515f82815260a060205260409020556111f26111e5846011015160c01c90565b600985015160c01c613453565b60a25f6112006001846143d8565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab919061123990846143d8565b81526020019081526020015f205f905560a45f60018361125991906143d8565b815260208082019290925260409081015f90812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810182905560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d611302866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b5f81815260a260205260408120541580159061134e57505f82815260a1602052604090205415155b92915050565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156113c0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113e491906143eb565b6114305760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610a70565b60a854156114805760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610a70565b611488613400565b6114956020830183614406565b60ff16156114e55760405162461bcd60e51b815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610a70565b5f6114f36040840184614426565b915050806115435760405162461bcd60e51b815260206004820152600e60248201527f626174636820697320656d7074790000000000000000000000000000000000006044820152606401610a70565b60608301356115945760405162461bcd60e51b815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610a70565b60808301356115e55760405162461bcd60e51b815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610a70565b5f806115fc6115f76020870187614426565b6133e5565b915091505f61160f836001015160c01c90565b90505f60a1816116208460016143c5565b81526020019081526020015f20541461167b5760405162461bcd60e51b815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610a70565b609e5481146116cc5760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610a70565b5f81815260a1602052604090205482146117285760405162461bcd60e51b815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610a70565b5f81815260ab60205260409020546060870135146117885760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610a70565b5f611797846011015160c01c90565b90505f80806117e96117ac60408c018c614426565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508792508891506135109050565b600196909601959485019493840193925090505f80491561180b575f4961182d565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b60408051611f2081019091529850905060f96118588961185060208f018f614406565b60ff1661368d565b60c087811b60018b015285811b60098b015286901b60118a01526019890183905260608c013560598a015260808c013560798a015260a08c013560998a01526118c7896118a860208e018e614426565b6040516118b6929190614487565b604051809103902060b99190910152565b60d98901889052603989018290528089205f88815260a1602090815260408083209390935560ab905290812060808e0135905560a65460ff16156119345760a7545f90815260a460205260409020600201546099544291611927916143c5565b61193191906143d8565b90505b6040518060800160405280428152602001826098544261195491906143c5565b61195e91906143c5565b81526020016119af8f80604001906119769190614426565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061369492505050565b81526097546020909101906001600160a01b031663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611a23573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a479190614496565b90525f89815260a2602090815260409182902083518155838201516001820155918301516002830155606090920151600390910155609e8990556097546001600160a01b031692506374fe27b791508c3590611aaf90611aa9908f018f614426565b5f6136eb565b5f8e8060400190611ac09190614426565b6040518663ffffffff1660e01b8152600401611ae09594939291906144f4565b602060405180830381865afa158015611afb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b1f91906143eb565b611b915760405162461bcd60e51b815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610a70565b5f86815260a16020526040808220549051909188917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a35050505050505050505050565b611bdf61338b565b5f81118015611bf057506099548114155b611c3c5760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610a70565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff16158015611ca257505f5460ff8083169116105b611d145760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610a70565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100179055611d4f5f5460ff1690565b60ff16600214611da15760405162461bcd60e51b815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610a70565b81611e145760405162461bcd60e51b815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610a70565b609e545f90815260ab6020526040902054611e3d57609e545f90815260ab602052604090208290555b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611c76565b611e9f61338b565b6001600160a01b0381165f908152609f602052604090205460ff16611f065760405162461bcd60e51b815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610a70565b6001600160a01b0381165f818152609f60209081526040808320805460ff19169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610acb565b611f5c61338b565b611f655f61373f565b565b5f54610100900460ff1615808015611f8557505f54600160ff909116105b80611f9e5750303b158015611f9e57505f5460ff166001145b6120105760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610a70565b5f805460ff19166001179055801561204e575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6001600160a01b038616158061206b57506001600160a01b038516155b156120a2576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0387166120f85760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610a70565b6121006137a8565b61210861382c565b609780546001600160a01b03808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a180156122a1575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b6122b261338b565b6001600160a01b038116158015906122d85750609c546001600160a01b03828116911614155b6123245760405162461bcd60e51b815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610a70565b609c80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b61239561338b565b5f811180156123a5575060648111155b80156123b3575060a9548114155b6123ff5760405162461bcd60e51b815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610a70565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b02239101611c76565b60a8541561248d5760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610a70565b612495613400565b5f806124a186866133e5565b915091505f6124b4836001015160c01c90565b5f81815260a1602052604090205490915082146125135760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610a70565b61251c81613211565b6125685760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610a70565b5f81815260a4602052604090206003810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010017905560a6805460ff1916905560995460029091015442916125c1916143c5565b11612637575f81815260a4602090815260408083206003908101805460ff1916600117905560a2835292819020909201548251808401909352600783527f54696d656f75740000000000000000000000000000000000000000000000000091830191909152612632918391906138b0565b6122a1565b612642838686613a0c565b6122a181336040518060400160405280600d81526020017f50726f6f66207375636365737300000000000000000000000000000000000000815250613bbf565b61268a61338b565b60aa80545f90915561269c8282613c8b565b604080516001600160a01b0384168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d879101611c76565b6126e361338b565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea541561275a5760405162461bcd60e51b815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610a70565b5f8061276684846133e5565b915091505f612779836001015160c01c90565b905080156127c95760405162461bcd60e51b815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610a70565b5f6127d5846079015190565b9050806128245760405162461bcd60e51b815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610a70565b600984015160c01c156128795760405162461bcd60e51b815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610a70565b5f612885856019015190565b036128d25760405162461bcd60e51b815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610a70565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440146128fe856039015190565b1461294b5760405162461bcd60e51b815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610a70565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a2865284872093518455915160018401555160028301555160039091015560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b612a3361338b565b8015612b5457612a41613d36565b60a65460ff1615612b135760a7545f90815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a59092528220805491929091612a959084906143c5565b909155505060a7545f90815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a6805460ff191690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b612b5c613d90565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612b36565b50565b335f908152609f602052604090205460ff16612be45760405162461bcd60e51b815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610a70565b60a85415612c345760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610a70565b612c3c613400565b60a65460ff1615612c8f5760405162461bcd60e51b815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610a70565b8167ffffffffffffffff16609d5410612cea5760405162461bcd60e51b815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610a70565b67ffffffffffffffff82165f90815260a160205260409020548114612d515760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610a70565b612d648267ffffffffffffffff16611326565b612db05760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610a70565b67ffffffffffffffff82165f90815260a460205260409020546801000000000000000090046001600160a01b031615612e2b5760405162461bcd60e51b815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610a70565b67ffffffffffffffff82165f90815260a260205260409020600101544210612ebb5760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610a70565b60975f9054906101000a90046001600160a01b03166001600160a01b0316630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f0b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f2f9190614496565b341015612f7e5760405162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610a70565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a4909552969096209451855492516001600160a01b031668010000000000000000027fffffffff00000000000000000000000000000000000000000000000000000000909316981697909717178355945160018301559151600282015592516003909301805492511515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff941515949094167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909316929092179290921790556001600160a01b03168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b9976346040516130d091815260200190565b60405180910390a35f609d5460016130e891906143c5565b90505b609e548111613140578267ffffffffffffffff16811461312e576099545f82815260a26020526040812060010180549091906131289084906143c5565b90915550505b8061313881614567565b9150506130eb565b505060a6805460ff1916600117905550565b335f90815260a56020526040812054908190036131b15760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610a70565b335f90815260a560205260408120556131ca8282613c8b565b816001600160a01b03167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a8260405161320591815260200190565b60405180910390a25050565b5f81815260a460205260408120546801000000000000000090046001600160a01b03161580159061134e5750505f90815260a46020526040902060030154610100900460ff161590565b61326361338b565b5f8111801561327457506098548114155b6132c05760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610a70565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a4379101611c76565b61330661338b565b6001600160a01b0381166133825760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610a70565b612b838161373f565b6033546001600160a01b03163314611f655760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a70565b5f805f6133f28585613dc9565b812090969095509350505050565b60655460ff1615611f655760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610a70565b805f0361345e575050565b8082035f5b8281101561350a5761010081840381111561347d57508083035b609b546040517f3c7f528300000000000000000000000000000000000000000000000000000000815260048101859052602481018390526001600160a01b0390911690633c7f5283906044015f604051808303815f87803b1580156134e0575f80fd5b505af11580156134f2573d5f803e3d5ffd5b50505050610100830192505061010081019050613463565b50505050565b60405183515f9182916020870191908190849061352e908590613e32565b90506002840193505f5b818110156135b257603c81028501805184526020908101517fffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000001690840152603a830192505f613588603c8361459e565b61359290876143c5565b90505f6135a382603a015160f01c90565b97909701965050600101613538565b506020850282016040525b801561367b575f6135d285603a015160f01c90565b90506135e083828b8b613ec7565b92505f6135f1866038015160f01c90565b9050818110156136435760405162461bcd60e51b815260206004820152601d60248201527f6e756d20747873206c657373207468616e206e756d204c31206d7367730000006044820152606401610a70565b50978801979690960195603c93909301927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016135bd565b50819003902096919550909350505050565b8082535050565b5f805f6020840190506002810191505f6136af828651613e32565b90505f5b6136be6001836143d8565b8110156136d457603c93909301926001016136b3565b505f6136e1845160c01c90565b9695505050505050565b60605f808080806136fe888a018a6146a2565b955095509550955095505081871061371c5794506137389350505050565b838710613730578295505050505050613738565b509293505050505b9392505050565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff166138245760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610a70565b611f65613f95565b5f54610100900460ff166138a85760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610a70565b611f6561401d565b60a88390555f83815260a460205260408082205460975491517f45bc4d1000000000000000000000000000000000000000000000000000000000815260048101869052680100000000000000009091046001600160a01b03908116939216906345bc4d10906024016020604051808303815f875af1158015613934573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906139589190614496565b5f86815260a460205260409020600101549091506139779082906143c5565b5f86815260a460209081526040808320546801000000000000000090046001600160a01b0316835260a5909152812080549091906139b69084906143c5565b90915550506040516139c990849061473f565b604051908190038120906001600160a01b0384169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b80613a595760405162461bcd60e51b815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610a70565b5f613a68846001015160c01c90565b90505f613a76856039015190565b90505f7f0000000000000000000000000000000000000000000000000000000000000000613aa5876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c549091506001600160a01b0316632c09a848613b67885160f81c90565b858888866040518663ffffffff1660e01b8152600401613b8b95949392919061476b565b5f6040518083038186803b158015613ba1575f80fd5b505afa158015613bb3573d5f803e3d5ffd5b50505050505050505050565b5f83815260a4602052604081206001015460a954909190606490613be3908461459e565b613bed919061479c565b9050613bf981836143d8565b60aa5f828254613c0991906143c5565b90915550506001600160a01b0384165f90815260a5602052604081208054839290613c359084906143c5565b9091555050604051613c4890849061473f565b604051908190038120906001600160a01b0386169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b8015613d32575f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114613cda576040519150601f19603f3d011682016040523d82523d5f602084013e613cdf565b606091505b5050905080613d305760405162461bcd60e51b815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610a70565b505b5050565b613d3e613400565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613d733390565b6040516001600160a01b03909116815260200160405180910390a1565b613d986140a2565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33613d73565b5f8160f9811015613e1c5760405162461bcd60e51b815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610a70565b6040519150808483378082016040529250929050565b5f613e3e835160f01c90565b9050805f03613e79576040517f5168407700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613e84603c8261459e565b613e8f9060026143c5565b821461134e576040517f4a969e2d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f835f03613ed6575083613f8d565b609b546001600160a01b03165f5b85811015613f87576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018590525f906001600160a01b0384169063ae453cd590602401602060405180830381865afa158015613f4a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f6e9190614496565b8852506020909601956001948501949384019301613ee4565b50859150505b949350505050565b5f54610100900460ff166140115760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610a70565b6065805460ff19169055565b5f54610100900460ff166140995760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610a70565b611f653361373f565b60655460ff16611f655760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610a70565b5f60208284031215614104575f80fd5b5035919050565b80356001600160a01b0381168114614121575f80fd5b919050565b5f60208284031215614136575f80fd5b6137388261410b565b5f8083601f84011261414f575f80fd5b50813567ffffffffffffffff811115614166575f80fd5b60208301915083602082850101111561417d575f80fd5b9250929050565b5f805f60408486031215614196575f80fd5b833567ffffffffffffffff8111156141ac575f80fd5b6141b88682870161413f565b909790965060209590950135949350505050565b5f80602083850312156141dd575f80fd5b823567ffffffffffffffff8111156141f3575f80fd5b6141ff8582860161413f565b90969095509350505050565b5f806040838503121561421c575f80fd5b823567ffffffffffffffff80821115614233575f80fd5b9084019060c08287031215614246575f80fd5b9092506020840135908082111561425b575f80fd5b5083016060818603121561426d575f80fd5b809150509250929050565b5f805f805f8060c0878903121561428d575f80fd5b6142968761410b565b95506142a46020880161410b565b94506142b26040880161410b565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f80604085870312156142e6575f80fd5b843567ffffffffffffffff808211156142fd575f80fd5b6143098883890161413f565b90965094506020870135915080821115614321575f80fd5b5061432e8782880161413f565b95989497509550505050565b8015158114612b83575f80fd5b5f60208284031215614357575f80fd5b81356137388161433a565b5f8060408385031215614373575f80fd5b823567ffffffffffffffff8116811461438a575f80fd5b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082018082111561134e5761134e614398565b8181038181111561134e5761134e614398565b5f602082840312156143fb575f80fd5b81516137388161433a565b5f60208284031215614416575f80fd5b813560ff81168114613738575f80fd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614459575f80fd5b83018035915067ffffffffffffffff821115614473575f80fd5b60200191503681900382131561417d575f80fd5b818382375f9101908152919050565b5f602082840312156144a6575f80fd5b5051919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b8181101561453e5784516001600160a01b031683529383019391830191600101614519565b505087604086015284810360608601526145598187896144ad565b9a9950505050505050505050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361459757614597614398565b5060010190565b808202811582820484141761134e5761134e614398565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f8301126145f1575f80fd5b8135602067ffffffffffffffff8083111561460e5761460e6145b5565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715614651576146516145b5565b6040529384526020818701810194908101925087851115614670575f80fd5b6020870191505b84821015614697576146888261410b565b83529183019190830190614677565b979650505050505050565b5f805f805f8060c087890312156146b7575f80fd5b86359550602087013567ffffffffffffffff808211156146d5575f80fd5b6146e18a838b016145e2565b96506040890135955060608901359150808211156146fd575f80fd5b6147098a838b016145e2565b94506080890135935060a0890135915080821115614725575f80fd5b5061473289828a016145e2565b9150509295509295509295565b5f82515f5b8181101561475e5760208186018101518583015201614744565b505f920191825250919050565b858152846020820152608060408201525f61478a6080830185876144ad565b90508260608301529695505050505050565b5f826147cf577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b50049056fea164736f6c6343000818000a0000000000000000000000000000000000000000000000000000000000000b02