60806040523480156200001157600080fd5b506040516200559738038062005597833981810160405260608110156200003757600080fd5b81019080805160405193929190846401000000008211156200005857600080fd5b838201915060208201858111156200006f57600080fd5b82518660018202830111640100000000821117156200008d57600080fd5b8083526020830192505050908051906020019080838360005b83811015620000c3578082015181840152602081019050620000a6565b50505050905090810190601f168015620000f15780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200011557600080fd5b838201915060208201858111156200012c57600080fd5b82518660018202830111640100000000821117156200014a57600080fd5b8083526020830192505050908051906020019080838360005b838110156200018057808201518184015260208101905062000163565b50505050905090810190601f168015620001ae5780820380516001836020036101000a031916815260200191505b50604052602001805190602001909291905050506000620001d46200036960201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506200028a6301ffc9a760e01b6200037160201b60201c565b82600c9080519060200190620002a29291906200047a565b5081600d9080519060200190620002bb9291906200047a565b5080600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600e60146101000a81548160ff021916908315150217905550620003306380ac58cd60e01b6200037160201b60201c565b62000348639325454260e01b6200037160201b60201c565b6200036063780e9d6360e01b6200037160201b60201c565b50505062000520565b600033905090565b63ffffffff60e01b817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614156200040e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433136353a20696e76616c696420696e746572666163652069640000000081525060200191505060405180910390fd5b6001806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620004bd57805160ff1916838001178555620004ee565b82800160010185558215620004ee579182015b82811115620004ed578251825591602001919060010190620004d0565b5b509050620004fd919062000501565b5090565b5b808211156200051c57600081600090555060010162000502565b5090565b61506780620005306000396000f3fe60806040526004361061021a5760003560e01c806374df39c911610123578063b88d4fde116100ab578063d547cfb71161006f578063d547cfb71461102a578063e36d6498146110ba578063e985e9c5146110e5578063f2fde38b1461116c578063fb107a4f146111bd5761021a565b8063b88d4fde14610d16578063bc28d70214610e28578063c39cbef114610e79578063c87b56dd14610f4b578063cb774d4714610fff5761021a565b8063946807fd116100f2578063946807fd14610af557806395d89b4114610b205780639ffdb65a14610bb0578063a22cb46514610c8e578063b5077f4414610ceb5761021a565b806374df39c91461092e5780638da5cb5b1461094557806392642744146109865780639416b423146109b45761021a565b806337e681e2116101a657806354b6f1611161017557806354b6f1611461076e5780636352211e146107995780636d522418146107fe57806370a08231146108b2578063715018a6146109175761021a565b806337e681e2146105fd5780633ccfd60b1461068d57806342842e0e146106a45780634f6ccce71461071f5761021a565b806315b56d10116101ed57806315b56d10146103df57806318160ddd146104bd57806318e20a38146104e857806323b872dd146105135780632f745c591461058e5761021a565b806301ffc9a71461021f57806306fdde031461028f578063081812fc1461031f578063095ea7b314610384575b600080fd5b34801561022b57600080fd5b506102776004803603602081101561024257600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690602001909291905050506111e8565b60405180821515815260200191505060405180910390f35b34801561029b57600080fd5b506102a4611250565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102e45780820151818401526020810190506102c9565b50505050905090810190601f1680156103115780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561032b57600080fd5b506103586004803603602081101561034257600080fd5b81019080803590602001909291905050506112f2565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561039057600080fd5b506103dd600480360360408110156103a757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061138d565b005b3480156103eb57600080fd5b506104a56004803603602081101561040257600080fd5b810190808035906020019064010000000081111561041f57600080fd5b82018360208201111561043157600080fd5b8035906020019184600183028401116401000000008311171561045357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506114d1565b60405180821515815260200191505060405180910390f35b3480156104c957600080fd5b506104d2611559565b6040518082815260200191505060405180910390f35b3480156104f457600080fd5b506104fd61156a565b6040518082815260200191505060405180910390f35b34801561051f57600080fd5b5061058c6004803603606081101561053657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611577565b005b34801561059a57600080fd5b506105e7600480360360408110156105b157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506115ed565b6040518082815260200191505060405180910390f35b34801561060957600080fd5b50610612611648565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610652578082015181840152602081019050610637565b50505050905090810190601f16801561067f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561069957600080fd5b506106a2611664565b005b3480156106b057600080fd5b5061071d600480360360608110156106c757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061177b565b005b34801561072b57600080fd5b506107586004803603602081101561074257600080fd5b810190808035906020019092919050505061179b565b6040518082815260200191505060405180910390f35b34801561077a57600080fd5b506107836117be565b6040518082815260200191505060405180910390f35b3480156107a557600080fd5b506107d2600480360360208110156107bc57600080fd5b81019080803590602001909291905050506117cb565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561080a57600080fd5b506108376004803603602081101561082157600080fd5b8101908080359060200190929190505050611802565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561087757808201518184015260208101905061085c565b50505050905090810190601f1680156108a45780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156108be57600080fd5b50610901600480360360208110156108d557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506118b7565b6040518082815260200191505060405180910390f35b34801561092357600080fd5b5061092c61198c565b005b34801561093a57600080fd5b50610943611b12565b005b34801561095157600080fd5b5061095a611c7c565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6109b26004803603602081101561099c57600080fd5b8101908080359060200190929190505050611ca5565b005b3480156109c057600080fd5b50610a7a600480360360208110156109d757600080fd5b81019080803590602001906401000000008111156109f457600080fd5b820183602082011115610a0657600080fd5b80359060200191846001830284011164010000000083111715610a2857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611fbe565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610aba578082015181840152602081019050610a9f565b50505050905090810190601f168015610ae75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610b0157600080fd5b50610b0a61213a565b6040518082815260200191505060405180910390f35b348015610b2c57600080fd5b50610b35612142565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610b75578082015181840152602081019050610b5a565b50505050905090810190601f168015610ba25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610bbc57600080fd5b50610c7660048036036020811015610bd357600080fd5b8101908080359060200190640100000000811115610bf057600080fd5b820183602082011115610c0257600080fd5b80359060200191846001830284011164010000000083111715610c2457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506121e4565b60405180821515815260200191505060405180910390f35b348015610c9a57600080fd5b50610ce960048036036040811015610cb157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035151590602001909291905050506124ec565b005b348015610cf757600080fd5b50610d006126a2565b6040518082815260200191505060405180910390f35b348015610d2257600080fd5b50610e2660048036036080811015610d3957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610da057600080fd5b820183602082011115610db257600080fd5b80359060200191846001830284011164010000000083111715610dd457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506126a8565b005b348015610e3457600080fd5b50610e6160048036036020811015610e4b57600080fd5b8101908080359060200190929190505050612720565b60405180821515815260200191505060405180910390f35b348015610e8557600080fd5b50610f4960048036036040811015610e9c57600080fd5b810190808035906020019092919080359060200190640100000000811115610ec357600080fd5b820183602082011115610ed557600080fd5b80359060200191846001830284011164010000000083111715610ef757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061274a565b005b348015610f5757600080fd5b50610f8460048036036020811015610f6e57600080fd5b8101908080359060200190929190505050612e1c565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610fc4578082015181840152602081019050610fa9565b50505050905090810190601f168015610ff15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561100b57600080fd5b50611014612e9c565b6040518082815260200191505060405180910390f35b34801561103657600080fd5b5061103f612ea2565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561107f578082015181840152602081019050611064565b50505050905090810190601f1680156110ac5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156110c657600080fd5b506110cf612ec2565b6040518082815260200191505060405180910390f35b3480156110f157600080fd5b506111546004803603604081101561110857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612ec8565b60405180821515815260200191505060405180910390f35b34801561117857600080fd5b506111bb6004803603602081101561118f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612f5c565b005b3480156111c957600080fd5b506111d2613167565b6040518082815260200191505060405180910390f35b600060016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b6060600c8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156112e85780601f106112bd576101008083540402835291602001916112e8565b820191906000526020600020905b8154815290600101906020018083116112cb57829003601f168201915b5050505050905090565b60006112fd8261331a565b611352576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180614ed6602c913960400191505060405180910390fd5b6007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000611398826117cb565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561141f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614fbd6021913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661143e613337565b73ffffffffffffffffffffffffffffffffffffffff16148061146d575061146c81611467613337565b612ec8565b5b6114c2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526038815260200180614ddf6038913960400191505060405180910390fd5b6114cc838361333f565b505050565b600060096114de83611fbe565b6040518082805190602001908083835b6020831061151157805182526020820191506020810190506020830392506114ee565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060009054906101000a900460ff169050919050565b600061156560056133f8565b905090565b621baf8063608432700181565b611588611582613337565b8261340d565b6115dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806150016031913960400191505060405180910390fd5b6115e8838383613501565b505050565b600061164082600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061374490919063ffffffff16565b905092915050565b604051806060016040528060408152602001614f026040913981565b61166c613337565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461172c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611777573d6000803e3d6000fd5b5050565b611796838383604051806020016040528060008152506126a8565b505050565b6000806117b283600561375e90919063ffffffff16565b50905080915050919050565b6863345a083e94d8000081565b60006117fb82604051806060016040528060298152602001614e6a60299139600561378a9092919063ffffffff16565b9050919050565b6060600860008381526020019081526020016000208054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156118ab5780601f10611880576101008083540402835291602001916118ab565b820191906000526020600020905b81548152906001019060200180831161188e57829003601f168201915b50505050509050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561193e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180614e40602a913960400191505060405180910390fd5b611985600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206137a9565b9050919050565b611994613337565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a54576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600060035414611b8a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f5374617274696e6720696e64657820697320616c72656164792073657400000081525060200191505060405180910390fd5b60006002541415611c03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5374617274696e6720696e64657820626c6f636b206d7573742062652073657481525060200191505060405180910390fd5b612b676002544060001c81611c1457fe5b0660038190555060ff611c32600254436137be90919063ffffffff16565b1115611c5257612b67600143034060001c81611c4a57fe5b066003819055505b60006003541415611c7a57611c73600160035461380890919063ffffffff16565b6003819055505b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b612b67611cb0611559565b10611d23576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f53616c652068617320616c726561647920656e6465640000000000000000000081525060200191505060405180910390fd5b60008111611d99576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f6e756d6265724f664e6674732063616e6e6f742062652030000000000000000081525060200191505060405180910390fd5b6014811115611df3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180614e176029913960400191505060405180910390fd5b612b67611e1082611e02611559565b61380890919063ffffffff16565b1115611e84576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f45786365656473204d41585f4e46545f535550504c590000000000000000000081525060200191505060405180910390fd5b34611e9f82611e91613167565b61389090919063ffffffff16565b14611f12576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45746865722076616c75652073656e74206973206e6f7420636f72726563740081525060200191505060405180910390fd5b60005b81811015611f7f576000611f27611559565b9050621baf80636084327001421015611f67576001600a600083815260200190815260200160002060006101000a81548160ff0219169083151502179055505b611f713382613916565b508080600101915050611f15565b506000600254148015611fae5750612b67611f98611559565b1480611fad5750621baf806360843270014210155b5b15611fbb57436002819055505b50565b6060808290506060815167ffffffffffffffff81118015611fde57600080fd5b506040519080825280601f01601f1916602001820160405280156120115781602001600182028036833780820191505090505b50905060005b825181101561212f57604183828151811061202e57fe5b602001015160f81c60f81b60f81c60ff161015801561206a5750605a83828151811061205657fe5b602001015160f81c60f81b60f81c60ff1611155b156120cf57602083828151811061207d57fe5b602001015160f81c60f81b60f81c0160f81b82828151811061209b57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350612122565b8281815181106120db57fe5b602001015160f81c60f81b8282815181106120f257fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b8080600101915050612017565b508092505050919050565b636084327081565b6060600d8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156121da5780601f106121af576101008083540402835291602001916121da565b820191906000526020600020905b8154815290600101906020018083116121bd57829003601f168201915b5050505050905090565b600060608290506001815110156121ff5760009150506124e7565b6064815111156122135760009150506124e7565b602060f81b8160008151811061222557fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614156122625760009150506124e7565b602060f81b8160018351038151811061227757fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614156122b45760009150506124e7565b6000816000815181106122c357fe5b602001015160f81c60f81b905060005b82518110156124df5760008382815181106122ea57fe5b602001015160f81c60f81b9050602060f81b817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480156123515750602060f81b837effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b156123635760009450505050506124e7565b603060f81b817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916101580156123bf5750603960f81b817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191611155b1580156124255750604160f81b817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916101580156124235750605a60f81b817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191611155b155b801561248a5750606160f81b817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916101580156124885750607a60f81b817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191611155b155b80156124bc5750602060f81b817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614155b156124ce5760009450505050506124e7565b8092505080806001019150506122d3565b506001925050505b919050565b6124f4613337565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612595576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4552433732313a20617070726f766520746f2063616c6c65720000000000000081525060200191505060405180910390fd5b80600b60006125a2613337565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661264f613337565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b612b6781565b6126b96126b3613337565b8361340d565b61270e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806150016031913960400191505060405180910390fd5b61271a84848484613934565b50505050565b6000600a600083815260200190815260200160002060009054906101000a900460ff169050919050565b6000612755836117cb565b90508073ffffffffffffffffffffffffffffffffffffffff16612776613337565b73ffffffffffffffffffffffffffffffffffffffff16146127ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f4552433732313a2063616c6c6572206973206e6f7420746865206f776e65720081525060200191505060405180910390fd5b6001151561280c836121e4565b151514612881576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4e6f7420612076616c6964206e6577206e616d6500000000000000000000000081525060200191505060405180910390fd5b60026008600085815260200190815260200160002060405180828054600181600116156101000203166002900480156128f15780601f106128cf5761010080835404028352918201916128f1565b820191906000526020600020905b8154815290600101906020018083116128dd575b5050915050602060405180830381855afa158015612913573d6000803e3d6000fd5b5050506040513d602081101561292857600080fd5b81019080805190602001909291905050506002836040518082805190602001908083835b6020831061296f578051825260208201915060208101905060208303925061294c565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa1580156129b1573d6000803e3d6000fd5b5050506040513d60208110156129c657600080fd5b81019080805190602001909291905050501415612a2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180614f9a6023913960400191505060405180910390fd5b60001515612a3b836114d1565b151514612ab0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4e616d6520616c7265616479207265736572766564000000000000000000000081525060200191505060405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd33306863345a083e94d800006040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015612b6a57600080fd5b505af1158015612b7e573d6000803e3d6000fd5b505050506040513d6020811015612b9457600080fd5b8101908080519060200190929190505050506000600860008581526020019081526020016000208054600181600116156101000203166002900490501115612c8d57612c8c600860008581526020019081526020016000208054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612c805780601f10612c5557610100808354040283529160200191612c80565b820191906000526020600020905b815481529060010190602001808311612c6357829003601f168201915b505050505060006139a6565b5b612c988260016139a6565b81600860008581526020019081526020016000209080519060200190612cbf929190614c51565b50600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342966c686863345a083e94d800006040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b158015612d3e57600080fd5b505af1158015612d52573d6000803e3d6000fd5b505050506040513d6020811015612d6857600080fd5b810190808051906020019092919050505050827f7e632a301794d8d4a81ea7e20f37d1947158d36e66403af04ba85dd194b66f1b836040518080602001828103825283818151815260200191508051906020019080838360005b83811015612ddd578082015181840152602081019050612dc2565b50505050905090810190601f168015612e0a5780820380516001836020036101000a031916815260200191505b509250505060405180910390a2505050565b6060612e278261331a565b612e7c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180614f6b602f913960400191505060405180910390fd5b612e95612e87612ea2565b612e9084613a33565b613b77565b9050919050565b60035481565b6060604051806060016040528060238152602001614fde60239139905090565b60025481565b6000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612f64613337565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613024576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156130aa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180614d436026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600063608432704210156131e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f53616c6520686173206e6f74207374617274656400000000000000000000000081525060200191505060405180910390fd5b612b676131ee611559565b10613261576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f53616c652068617320616c726561647920656e6465640000000000000000000081525060200191505060405180910390fd5b600061326b611559565b9050612b648110613288576802b5e3af16b1880000915050613317565b612b5c81106132a2576729a2241af62c0000915050613317565b61271081106132bc576714d1120d7b160000915050613317565b611f4081106132d657670c7d713b49da0000915050613317565b61138881106132f0576706f05b59d3b20000915050613317565b6107d0811061330a576702c68af0bb140000915050613317565b67016345785d8a00009150505b90565b6000613330826005613bbb90919063ffffffff16565b9050919050565b600033905090565b816007600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166133b2836117cb565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061340682600001613bd5565b9050919050565b60006134188261331a565b61346d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180614db3602c913960400191505060405180910390fd5b6000613478836117cb565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806134e757508373ffffffffffffffffffffffffffffffffffffffff166134cf846112f2565b73ffffffffffffffffffffffffffffffffffffffff16145b806134f857506134f78185612ec8565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16613521826117cb565b73ffffffffffffffffffffffffffffffffffffffff161461358d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180614f426029913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613613576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180614d696024913960400191505060405180910390fd5b61361e838383613be6565b61362960008261333f565b61367a81600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613beb90919063ffffffff16565b506136cc81600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613c0590919063ffffffff16565b506136e381836005613c1f9092919063ffffffff16565b50808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60006137538360000183613c54565b60001c905092915050565b6000806000806137718660000186613cd7565b915091508160001c8160001c9350935050509250929050565b600061379d846000018460001b84613d70565b60001c90509392505050565b60006137b782600001613e66565b9050919050565b600061380083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613e77565b905092915050565b600080828401905083811015613886576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000808314156138a35760009050613910565b60008284029050828482816138b457fe5b041461390b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614eb56021913960400191505060405180910390fd5b809150505b92915050565b613930828260405180602001604052806000815250613f37565b5050565b61393f848484613501565b61394b84848484613fa8565b6139a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180614d116032913960400191505060405180910390fd5b50505050565b8060096139b284611fbe565b6040518082805190602001908083835b602083106139e557805182526020820191506020810190506020830392506139c2565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060006101000a81548160ff0219169083151502179055505050565b60606000821415613a7b576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613b72565b600082905060005b60008214613aa5578080600101915050600a8281613a9d57fe5b049150613a83565b60608167ffffffffffffffff81118015613abe57600080fd5b506040519080825280601f01601f191660200182016040528015613af15781602001600182028036833780820191505090505b50905060006001830390505b60008614613b6a57600a8681613b0f57fe5b0660300160f81b82828060019003935081518110613b2957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8681613b6257fe5b049550613afd565b819450505050505b919050565b6060613bb38383604051806020016040528060008152506040518060200160405280600081525060405180602001604052806000815250614279565b905092915050565b6000613bcd836000018360001b614543565b905092915050565b600081600001805490509050919050565b505050565b6000613bfd836000018360001b614566565b905092915050565b6000613c17836000018360001b61464e565b905092915050565b6000613c4b846000018460001b8473ffffffffffffffffffffffffffffffffffffffff1660001b6146be565b90509392505050565b600081836000018054905011613cb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180614cef6022913960400191505060405180910390fd5b826000018281548110613cc457fe5b9060005260206000200154905092915050565b60008082846000018054905011613d39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180614e936022913960400191505060405180910390fd5b6000846000018481548110613d4a57fe5b906000526020600020906002020190508060000154816001015492509250509250929050565b60008084600101600085815260200190815260200160002054905060008114158390613e37576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613dfc578082015181840152602081019050613de1565b50505050905090810190601f168015613e295780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50846000016001820381548110613e4a57fe5b9060005260206000209060020201600101549150509392505050565b600081600001805490509050919050565b6000838311158290613f24576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613ee9578082015181840152602081019050613ece565b50505050905090810190601f168015613f165780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b613f41838361479a565b613f4e6000848484613fa8565b613fa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180614d116032913960400191505060405180910390fd5b505050565b6000600e60149054906101000a900460ff1661402c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b6000600e60146101000a81548160ff0219169083151502179055506140668473ffffffffffffffffffffffffffffffffffffffff1661498e565b6140735760019050614256565b60606141dd63150b7a0260e01b614088613337565b888787604051602401808573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561410c5780820151818401526020810190506140f1565b50505050905090810190601f1680156141395780820380516001836020036101000a031916815260200191505b5095505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051806060016040528060328152602001614d11603291398773ffffffffffffffffffffffffffffffffffffffff166149a19092919063ffffffff16565b905060008180602001905160208110156141f657600080fd5b8101908080519060200190929190505050905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614925050505b6001600e60146101000a81548160ff021916908315150217905550949350505050565b60608086905060608690506060869050606086905060608690506060815183518551875189510101010167ffffffffffffffff811180156142b957600080fd5b506040519080825280601f01601f1916602001820160405280156142ec5781602001600182028036833780820191505090505b50905060608190506000805b88518110156143665788818151811061430d57fe5b602001015160f81c60f81b83838060010194508151811061432a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806001019150506142f8565b5060005b87518110156143d85787818151811061437f57fe5b602001015160f81c60f81b83838060010194508151811061439c57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808060010191505061436a565b5060005b865181101561444a578681815181106143f157fe5b602001015160f81c60f81b83838060010194508151811061440e57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806001019150506143dc565b5060005b85518110156144bc5785818151811061446357fe5b602001015160f81c60f81b83838060010194508151811061448057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808060010191505061444e565b5060005b845181101561452e578481815181106144d557fe5b602001015160f81c60f81b8383806001019450815181106144f257fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806001019150506144c0565b50819850505050505050505095945050505050565b600080836001016000848152602001908152602001600020541415905092915050565b6000808360010160008481526020019081526020016000205490506000811461464257600060018203905060006001866000018054905003905060008660000182815481106145b157fe5b90600052602060002001549050808760000184815481106145ce57fe5b906000526020600020018190555060018301876001016000838152602001908152602001600020819055508660000180548061460657fe5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050614648565b60009150505b92915050565b600061465a83836149b9565b6146b35782600001829080600181540180825580915050600190039060005260206000200160009091909190915055826000018054905083600101600084815260200190815260200160002081905550600190506146b8565b600090505b92915050565b600080846001016000858152602001908152602001600020549050600081141561476557846000016040518060400160405280868152602001858152509080600181540180825580915050600190039060005260206000209060020201600090919091909150600082015181600001556020820151816001015550508460000180549050856001016000868152602001908152602001600020819055506001915050614793565b8285600001600183038154811061477857fe5b90600052602060002090600202016001018190555060009150505b9392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561483d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4552433732313a206d696e7420746f20746865207a65726f206164647265737381525060200191505060405180910390fd5b6148468161331a565b156148b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000081525060200191505060405180910390fd5b6148c560008383613be6565b61491681600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613c0590919063ffffffff16565b5061492d81836005613c1f9092919063ffffffff16565b50808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b60606149b084846000856149dc565b90509392505050565b600080836001016000848152602001908152602001600020541415905092915050565b606082471015614a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180614d8d6026913960400191505060405180910390fd5b614a408561498e565b614ab2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081525060200191505060405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b60208310614b025780518252602082019150602081019050602083039250614adf565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114614b64576040519150601f19603f3d011682016040523d82523d6000602084013e614b69565b606091505b5091509150614b79828286614b85565b92505050949350505050565b60608315614b9557829050614c4a565b600083511115614ba85782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614c0f578082015181840152602081019050614bf4565b50505050905090810190601f168015614c3c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b9392505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10614c9257805160ff1916838001178555614cc0565b82800160010185558215614cc0579182015b82811115614cbf578251825591602001919060010190614ca4565b5b509050614ccd9190614cd1565b5090565b5b80821115614cea576000816000905550600101614cd2565b509056fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e64734552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465724f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734552433732313a207472616e7366657220746f20746865207a65726f2061646472657373416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c4552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c596f75206d6179206e6f7420627579206d6f7265207468616e203230204e465473206174206f6e63654552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e6473536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e663766613633633166373661323536613433623164613366666233623863643132316164323035363936633465643830373135306237383231363233656330634552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e4552433732314d657461646174613a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656e4e6577206e616d652069732073616d65206173207468652063757272656e74206f6e654552433732313a20617070726f76616c20746f2063757272656e74206f776e657268747470733a2f2f6e6674647265616d636172732e636f6d2f6170692f746f6b656e2f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564a2646970667358221220022490f470216545b2e887f0a8321f93f0fa4500418f821f452213dab1b199f564736f6c63430007000033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000002f0aa02cb3365fd88b8493c327fe0a462f8f41f30000000000000000000000000000000000000000000000000000000000000009447265616d63617273000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024443000000000000000000000000000000000000000000000000000000000000