6080604052600060a160006101000a81548160ff0219169083151502179055506009600a0a620f42400260a455600a60a55563613a397860a65534801561004557600080fd5b50613a90806100556000396000f3fe6080604052600436106102085760003560e01c80637ecebe0011610118578063b1bf962d116100a0578063e1b11da41161006f578063e1b11da414610d78578063f14210a614610da3578063f2cc0c1814610dde578063f2fde38b14610e2f578063f84354f114610e805761020f565b8063b1bf962d14610bd1578063c4d66de814610bfc578063d505accf14610c4d578063dd62ed3e14610cf35761020f565b80638e27d7d7116100e75780638e27d7d7146109f15780638f32d59b14610a3257806395d89b4114610a5f578063a457c2d714610aef578063a9059cbb14610b605761020f565b80637ecebe00146108bf57806389e1454c146109245780638b5a6a081461095f5780638da5cb5b146109b05761020f565b8063313ce5671161019b57806349bd5a5e1161016a57806349bd5a5e1461071957806370a082311461075a578063715018a6146107bf57806378160376146107d65780637a43e23f146108665761020f565b8063313ce5671461060e5780633644e5151461063c57806339509351146106675780633ad10ef6146106d85761020f565b806318160ddd116101d757806318160ddd146104c25780631da24f3e146104ed57806323b872dd1461055257806330adf81f146105e35761020f565b806306fdde0314610214578063095ea7b3146102a45780631624f6c6146103155780631694505e146104815761020f565b3661020f57005b600080fd5b34801561022057600080fd5b50610229610ed1565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561026957808201518184015260208101905061024e565b50505050905090810190601f1680156102965780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102b057600080fd5b506102fd600480360360408110156102c757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f73565b60405180821515815260200191505060405180910390f35b34801561032157600080fd5b5061047f6004803603606081101561033857600080fd5b810190808035906020019064010000000081111561035557600080fd5b82018360208201111561036757600080fd5b8035906020019184600183028401116401000000008311171561038957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156103ec57600080fd5b8201836020820111156103fe57600080fd5b8035906020019184600183028401116401000000008311171561042057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803560ff169060200190929190505050611065565b005b34801561048d57600080fd5b506104966111a0565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104ce57600080fd5b506104d76111c6565b6040518082815260200191505060405180910390f35b3480156104f957600080fd5b5061053c6004803603602081101561051057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506111d0565b6040518082815260200191505060405180910390f35b34801561055e57600080fd5b506105cb6004803603606081101561057557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611219565b60405180821515815260200191505060405180910390f35b3480156105ef57600080fd5b506105f861137c565b6040518082815260200191505060405180910390f35b34801561061a57600080fd5b506106236113a0565b604051808260ff16815260200191505060405180910390f35b34801561064857600080fd5b506106516113b7565b6040518082815260200191505060405180910390f35b34801561067357600080fd5b506106c06004803603604081101561068a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061148a565b60405180821515815260200191505060405180910390f35b3480156106e457600080fd5b506106ed611686565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561072557600080fd5b5061072e6116ac565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561076657600080fd5b506107a96004803603602081101561077d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116d2565b6040518082815260200191505060405180910390f35b3480156107cb57600080fd5b506107d461172f565b005b3480156107e257600080fd5b506107eb6117e9565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561082b578082015181840152602081019050610810565b50505050905090810190601f1680156108585780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561087257600080fd5b506108a96004803603604081101561088957600080fd5b810190808035906020019092919080359060200190929190505050611822565b6040518082815260200191505060405180910390f35b3480156108cb57600080fd5b5061090e600480360360208110156108e257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a04565b6040518082815260200191505060405180910390f35b34801561093057600080fd5b5061095d6004803603602081101561094757600080fd5b8101908080359060200190929190505050611a4d565b005b34801561096b57600080fd5b506109ae6004803603602081101561098257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a68565b005b3480156109bc57600080fd5b506109c5611b0a565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156109fd57600080fd5b50610a06611b34565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610a3e57600080fd5b50610a47611b5a565b60405180821515815260200191505060405180910390f35b348015610a6b57600080fd5b50610a74611bb2565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610ab4578082015181840152602081019050610a99565b50505050905090810190601f168015610ae15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610afb57600080fd5b50610b4860048036036040811015610b1257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611c54565b60405180821515815260200191505060405180910390f35b348015610b6c57600080fd5b50610bb960048036036040811015610b8357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611e65565b60405180821515815260200191505060405180910390f35b348015610bdd57600080fd5b50610be6611eb8565b6040518082815260200191505060405180910390f35b348015610c0857600080fd5b50610c4b60048036036020811015610c1f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f15565b005b348015610c5957600080fd5b50610cf1600480360360e0811015610c7057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803560ff16906020019092919080359060200190929190803590602001909291905050506124a4565b005b348015610cff57600080fd5b50610d6260048036036040811015610d1657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506127da565b6040518082815260200191505060405180910390f35b348015610d8457600080fd5b50610d8d612861565b6040518082815260200191505060405180910390f35b348015610daf57600080fd5b50610ddc60048036036020811015610dc657600080fd5b8101908080359060200190929190505050612885565b005b348015610dea57600080fd5b50610e2d60048036036020811015610e0157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506128f1565b005b348015610e3b57600080fd5b50610e7e60048036036020811015610e5257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612a1c565b005b348015610e8c57600080fd5b50610ecf60048036036020811015610ea357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612a39565b005b606060338054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610f695780601f10610f3e57610100808354040283529160200191610f69565b820191906000526020600020905b815481529060010190602001808311610f4c57829003601f168201915b5050505050905090565b600081609f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600060019054906101000a900460ff16806110845750611083612b65565b5b8061109a575060008054906101000a900460ff16155b6110ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180613a2d602e913960400191505060405180910390fd5b60008060019054906101000a900460ff1690506001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff021916908315150217905550836033908051906020019061114d929190613981565b508260349080519060200190611164929190613981565b5081603560006101000a81548160ff021916908360ff16021790555080600060016101000a81548160ff02191690831515021790555050505050565b60a160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000609c54905090565b6000609e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600082600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561125657600080fd5b6112e583609f60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b7c90919063ffffffff16565b609f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611370858585612b9c565b60019150509392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b6000603560009054906101000a900460ff16905090565b6000804690507f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6113e6610ed1565b805190602001206040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250805190602001208330604051602001808681526020018581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff168152602001955050505050506040516020818303038152906040528051906020012091505090565b600061151b82609f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461334990919063ffffffff16565b609f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925609f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b60a360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60a260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611728609d54609e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461336890919063ffffffff16565b9050919050565b611737611b5a565b61174057600080fd5b606860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482060405160405180910390a26000606860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6000609b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461187e57600080fd5b60008214156118cb57827f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f2609c546040518082815260200191505060405180910390a2609c5490506119fe565b60008212156118fc576118f16118e08361338e565b609c54612b7c90919063ffffffff16565b609c81905550611918565b61191182609c5461334990919063ffffffff16565b609c819055505b6fffffffffffffffffffffffffffffffff8016609c54111561194e576fffffffffffffffffffffffffffffffff8016609c819055505b6119b8609c546009600a0a633b9aca00027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8161198757fe5b067fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0361336890919063ffffffff16565b609d81905550827f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f2609c546040518082815260200191505060405180910390a2609c5490505b92915050565b600060a060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611a55611b5a565b611a5e57600080fd5b8060a48190555050565b611a70611b5a565b611a7957600080fd5b80609b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f0e6961f1a1afb87eaf51fd64f22ddc10062e23aa7838eac5d0bdf140bfd3897281604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b6000606860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b609b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000606860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b606060348054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611c4a5780601f10611c1f57610100808354040283529160200191611c4a565b820191906000526020600020905b815481529060010190602001808311611c2d57829003601f168201915b5050505050905090565b600080609f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905080831015611cf657611cf18382612b7c90919063ffffffff16565b611cf9565b60005b609f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925609f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b600082600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ea257600080fd5b611ead338585612b9c565b600191505092915050565b60006009600a0a633b9aca00027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81611eed57fe5b067fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03905090565b600060019054906101000a900460ff1680611f345750611f33612b65565b5b80611f4a575060008054906101000a900460ff16155b611f9f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180613a2d602e913960400191505060405180910390fd5b60008060019054906101000a900460ff1690506001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff02191690831515021790555061205d6040518060400160405280600981526020017f446f6f6e742042757900000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f44425559000000000000000000000000000000000000000000000000000000008152506009611065565b612066826133bc565b6009600a0a633b9aca0002609c819055506009600a0a633b9aca00027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff816120aa57fe5b067fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03609e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061217a609c546009600a0a633b9aca00027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8161214957fe5b067fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0361336890919063ffffffff16565b609d819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156121df57600080fd5b505afa1580156121f3573d6000803e3d6000fd5b505050506040513d602081101561220957600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561227c57600080fd5b505afa158015612290573d6000803e3d6000fd5b505050506040513d60208110156122a657600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b15801561232057600080fd5b505af1158015612334573d6000803e3d6000fd5b505050506040513d602081101561234a57600080fd5b810190808051906020019092919050505060a260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060a160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508260a360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef609c546040518082815260200191505060405180910390a35080600060016101000a81548160ff0219169083151502179055505050565b834211156124b157600080fd5b600060a060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9898989858a604051602001808781526020018673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020018281526020019650505050505050604051602081830303815290604052805190602001209050600061259e6113b7565b8260405160200180807f19010000000000000000000000000000000000000000000000000000000000008152506002018381526020018281526020019250505060405160208183030381529060405280519060200120905060018187878760405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612650573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff161461269157600080fd5b6126a560018461334990919063ffffffff16565b60a060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555087609f60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258a6040518082815260200191505060405180910390a350505050505050505050565b6000609f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b60a360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156128ed573d6000803e3d6000fd5b5050565b6128f9611b5a565b61290257600080fd5b60a760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166129c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f416c7265616479204578636c756465640000000000000000000000000000000081525060200191505060405180910390fd5b600060a760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612a24611b5a565b612a2d57600080fd5b612a36816134ed565b50565b612a41611b5a565b612a4a57600080fd5b60a760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612b0a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f416c726561647920496e636c756465640000000000000000000000000000000081525060200191505060405180910390fd5b600160a760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000803090506000813b9050600081149250505090565b600082821115612b8b57600080fd5b600082840390508091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c3f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f5472616e736665722066726f6d20746865207a65726f2061646472657373000081525060200191505060405180910390fd5b6000612c56609d54836135e790919063ffffffff16565b9050612c60611b0a565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015612cce5750612c9e611b0a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15612d4c5760a454821115612d4b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f4578636565647320746865206d617820676f6e0000000000000000000000000081525060200191505060405180910390fd5b5b6000612da2609d54609e60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461336890919063ffffffff16565b905060a4548110612db35760a45490505b60a160009054906101000a900460ff16158015612e1d575060a260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b8015612e295750600081115b15612e3857612e3781613621565b5b60a760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612ed9575060a760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8015612ee7575060a6544211155b8015612f1f57503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b156131b2576000612f4e60a554612f4060648661336890919063ffffffff16565b6135e790919063ffffffff16565b9050612fa283609e60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b7c90919063ffffffff16565b609e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613049612ffb8285612b7c90919063ffffffff16565b609e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461334990919063ffffffff16565b609e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506130de81609e60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461334990919063ffffffff16565b609e60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef613197609d546131898689612b7c90919063ffffffff16565b61336890919063ffffffff16565b6040518082815260200191505060405180910390a350613342565b61320482609e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b7c90919063ffffffff16565b609e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061329982609e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461334990919063ffffffff16565b609e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a35b5050505050565b60008082840190508381101561335e57600080fd5b8091505092915050565b600080821161337657600080fd5b600082848161338157fe5b0490508091505092915050565b600060ff6001901b8214156133a257600080fd5b600082126133b057816133b5565b816000035b9050919050565b600060019054906101000a900460ff16806133db57506133da612b65565b5b806133f1575060008054906101000a900460ff16155b613446576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180613a2d602e913960400191505060405180910390fd5b60008060019054906101000a900460ff1690506001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff02191690831515021790555081606860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600060016101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561352757600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16606860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380606860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000808314156135fa576000905061361b565b600082840290508284828161360b57fe5b041461361657600080fd5b809150505b92915050565b600160a160006101000a81548160ff0219169083151502179055506000600267ffffffffffffffff8111801561365657600080fd5b506040519080825280602002602001820160405280156136855781602001602082028036833780820191505090505b509050308160008151811061369657fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060a160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561373857600080fd5b505afa15801561374c573d6000803e3d6000fd5b505050506040513d602081101561376257600080fd5b81019080805190602001909291905050508160018151811061378057fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505081609f60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060a160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060a160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015613921578082015181840152602081019050613906565b505050509050019650505050505050600060405180830381600087803b15801561394a57600080fd5b505af115801561395e573d6000803e3d6000fd5b5050505050600060a160006101000a81548160ff02191690831515021790555050565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826139b757600085556139fe565b82601f106139d057805160ff19168380011785556139fe565b828001600101855582156139fe579182015b828111156139fd5782518255916020019190600101906139e2565b5b509050613a0b9190613a0f565b5090565b5b80821115613a28576000816000905550600101613a10565b509056fe436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564a2646970667358221220a0a7d4d25ad98b23625332fc0cd49b6f19ab44581764a4372c017c4cd9e9809764736f6c63430007060033