60806040526000603d556000603e55600060415534801561001f57600080fd5b5061002e61013160201b60201c565b603660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a333604260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610139565b600033905090565b612878806101486000396000f3fe608060405234801561001057600080fd5b50600436106101ce5760003560e01c80638da5889711610104578063cd3daf9d116100a2578063e9fad8ee11610071578063e9fad8ee146106a7578063ebe2b12b146106b1578063f2fde38b146106cf578063f616942014610713576101ce565b8063cd3daf9d146105d7578063cee5cf6f146105f5578063d5f394881461063f578063df136d6514610689576101ce565b80639c907b58116100de5780639c907b5814610523578063a56dfe4a14610541578063a694fc3a1461058b578063c8f33c91146105b9576101ce565b80638da58897146104995780638da5cb5b146104b75780638f32d59b14610501576101ce565b80633d18b91211610171578063715018a61161014b578063715018a6146103fb5780637b0a47ee1461040557806380faa57d146104235780638b87634714610441576101ce565b80633d18b9121461034f5780636e18222c1461035957806370a08231146103a3576101ce565b80630e15561a116101ad5780630e15561a146102c75780630fb5a6b4146102e557806318160ddd146103035780632e1a7d4d14610321576101ce565b80628cc262146101d35780630700037d1461022b5780630d68b76114610283575b600080fd5b610215600480360360208110156101e957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506107b5565b6040518082815260200191505060405180910390f35b61026d6004803603602081101561024157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061089c565b6040518082815260200191505060405180910390f35b6102c56004803603602081101561029957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506108b4565b005b6102cf610972565b6040518082815260200191505060405180910390f35b6102ed610978565b6040518082815260200191505060405180910390f35b61030b61097e565b6040518082815260200191505060405180910390f35b61034d6004803603602081101561033757600080fd5b8101908080359060200190929190505050610988565b005b610357610c5e565b005b610361610f79565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103e5600480360360208110156103b957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f9f565b6040518082815260200191505060405180910390f35b610403610fe8565b005b61040d611123565b6040518082815260200191505060405180910390f35b61042b611129565b6040518082815260200191505060405180910390f35b6104836004803603602081101561045757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061113c565b6040518082815260200191505060405180910390f35b6104a1611154565b6040518082815260200191505060405180910390f35b6104bf61115a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610509611184565b604051808215151515815260200191505060405180910390f35b61052b6111e3565b6040518082815260200191505060405180910390f35b6105496111e9565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105b7600480360360208110156105a157600080fd5b810190808035906020019092919050505061120f565b005b6105c16114e5565b6040518082815260200191505060405180910390f35b6105df6114eb565b6040518082815260200191505060405180910390f35b6105fd611583565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106476115a9565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106916115cf565b6040518082815260200191505060405180910390f35b6106af6115d5565b005b6106b96115f0565b6040518082815260200191505060405180910390f35b610711600480360360208110156106e557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506115f6565b005b6107b3600480360360c081101561072957600080fd5b81019080803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061167c565b005b6000610895604460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610887670de0b6b3a7640000610879610862604360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546108546114eb565b61189d90919063ffffffff16565b61086b88610f9f565b6118e790919063ffffffff16565b61196d90919063ffffffff16565b6119b790919063ffffffff16565b9050919050565b60446020528060005260406000206000915090505481565b6108bc611184565b61092e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80603760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60415481565b603a5481565b6000603454905090565b336109916114eb565b60408190555061099f611129565b603f81905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610a6c576109e2816107b5565b604460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550604054604360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b603d544210610b1657610a9e6064610a906032603b546118e790919063ffffffff16565b61196d90919063ffffffff16565b603b81905550610abb603a54603b5461196d90919063ffffffff16565b603e81905550610ad6603a54426119b790919063ffffffff16565b603d819055507fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d603b546040518082815260200191505060405180910390a15b603c544211610b8d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f6e6f74207374617274000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60008211610c03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f43616e6e6f74207769746864726177203000000000000000000000000000000081525060200191505060405180910390fd5b610c0c82611a3f565b3373ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5836040518082815260200191505060405180910390a25050565b33610c676114eb565b604081905550610c75611129565b603f81905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610d4257610cb8816107b5565b604460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550604054604360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b603d544210610dec57610d746064610d666032603b546118e790919063ffffffff16565b61196d90919063ffffffff16565b603b81905550610d91603a54603b5461196d90919063ffffffff16565b603e81905550610dac603a54426119b790919063ffffffff16565b603d819055507fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d603b546040518082815260200191505060405180910390a15b603c544211610e63576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f6e6f74207374617274000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000610e6e336107b5565b90506000811115610f75576000604460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f0b3382603960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611b3f9092919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e0486826040518082815260200191505060405180910390a2610f6e816041546119b790919063ffffffff16565b6041819055505b5050565b603860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000603560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ff0611184565b611062576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000603660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b603e5481565b600061113742603d54611c10565b905090565b60436020528060005260406000206000915090505481565b603c5481565b6000603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166111c7611c29565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b603b5481565b603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b336112186114eb565b604081905550611226611129565b603f81905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146112f357611269816107b5565b604460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550604054604360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b603d54421061139d5761132560646113176032603b546118e790919063ffffffff16565b61196d90919063ffffffff16565b603b81905550611342603a54603b5461196d90919063ffffffff16565b603e8190555061135d603a54426119b790919063ffffffff16565b603d819055507fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d603b546040518082815260200191505060405180910390a15b603c544211611414576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f6e6f74207374617274000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000821161148a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f43616e6e6f74207374616b65203000000000000000000000000000000000000081525060200191505060405180910390fd5b61149382611c31565b3373ffffffffffffffffffffffffffffffffffffffff167f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d836040518082815260200191505060405180910390a25050565b603f5481565b6000806114f661097e565b1415611506576040549050611580565b61157d61156c61151461097e565b61155e670de0b6b3a7640000611550603e54611542603f54611534611129565b61189d90919063ffffffff16565b6118e790919063ffffffff16565b6118e790919063ffffffff16565b61196d90919063ffffffff16565b6040546119b790919063ffffffff16565b90505b90565b603960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b604260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60405481565b6115e66115e133610f9f565b610988565b6115ee610c5e565b565b603d5481565b6115fe611184565b611670576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61167981611d33565b50565b604260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116d657600080fd5b600060019054906101000a900460ff16806116f557506116f4611e79565b5b8061170c57506000809054906101000a900460ff16155b611761576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806127ec602e913960400191505060405180910390fd5b60008060019054906101000a900460ff1690506001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055506117bb6117b68486611e8a565b61206a565b82603860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081603960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555086603a8190555084603c8190555061187a611875606461186760328a6118e790919063ffffffff16565b61196d90919063ffffffff16565b6120ae565b80600060016101000a81548160ff02191690831515021790555050505050505050565b60006118df83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612282565b905092915050565b6000808314156118fa5760009050611967565b600082840290508284828161190b57fe5b0414611962576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806127cb6021913960400191505060405180910390fd5b809150505b92915050565b60006119af83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612342565b905092915050565b600080828401905083811015611a35576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b611a548160345461189d90919063ffffffff16565b603481905550611aac81603560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461189d90919063ffffffff16565b603560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611b3c3382603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611b3f9092919063ffffffff16565b50565b611c0b838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb905060e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612408565b505050565b6000818310611c1f5781611c21565b825b905092915050565b600033905090565b611c46816034546119b790919063ffffffff16565b603481905550611c9e81603560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119b790919063ffffffff16565b603560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611d30333083603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612653909392919063ffffffff16565b50565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611db9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806127a56026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380603660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080303b90506000811491505090565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610611ec65782611ec8565b835b905060008373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1610611f055784611f07565b835b90506000735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f8383604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b8152601401925050506040516020818303038152906040528051906020012060405160200180807fff000000000000000000000000000000000000000000000000000000000000008152506001018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b8152601401828152602001807f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f815250602001925050506040516020818303038152906040528051906020012060001c905080935050505092915050565b80603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006120b86114eb565b6040819055506120c6611129565b603f81905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461219357612109816107b5565b604460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550604054604360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b603d5442106121bc576121b1603a548361196d90919063ffffffff16565b603e8190555061221e565b60006121d342603d5461189d90919063ffffffff16565b905060006121ec603e54836118e790919063ffffffff16565b9050612215603a5461220783876119b790919063ffffffff16565b61196d90919063ffffffff16565b603e8190555050505b81603b8190555042603f81905550612241603a54426119b790919063ffffffff16565b603d819055507fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d826040518082815260200191505060405180910390a15050565b600083831115829061232f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156122f45780820151818401526020810190506122d9565b50505050905090810190601f1680156123215780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600080831182906123ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156123b3578082015181840152602081019050612398565b50505050905090810190601f1680156123e05780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816123fa57fe5b049050809150509392505050565b6124278273ffffffffffffffffffffffffffffffffffffffff16612759565b612499576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e74726163740081525060200191505060405180910390fd5b600060608373ffffffffffffffffffffffffffffffffffffffff16836040518082805190602001908083835b602083106124e857805182526020820191506020810190506020830392506124c5565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461254a576040519150601f19603f3d011682016040523d82523d6000602084013e61254f565b606091505b5091509150816125c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656481525060200191505060405180910390fd5b60008151111561264d578080602001905160208110156125e657600080fd5b810190808051906020019092919050505061264c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018061281a602a913960400191505060405180910390fd5b5b50505050565b612753848573ffffffffffffffffffffffffffffffffffffffff166323b872dd905060e01b858585604051602401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612408565b50505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f91506000801b821415801561279b5750808214155b9250505091905056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a65645361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a265627a7a7231582017df959761468d61af5efc07ae21fc1d89404fbf3fda7aabf4470586353cf52a64736f6c63430005110032